xml - 如何使用 xslt 从文档方法中删除节点

标签 xml xslt xpath

下面是document_1.xml

<products>
    <product>
        <name>Pen</name>
        <Quantity>10</Quantity>
    </product>
    <product>
        <name>Pencil</name>
        <Quantity>20</Quantity>
    </product>
    <product>
        <name>Bag</name>
        <Quantity>25</Quantity>
    </product>
</products>

document_2.xml

<products>
    <product>
        <name>Pen</name>
        <Quantity>30</Quantity>
    </product> 

    <product>
        <name>Pencil</name>
        <Quantity>5</Quantity>
    </product>
    <product>
        <name>Bag</name>
        <Quantity>2</Quantity>
    </product>
</products>

document.xml

<products>
</products>

下面是我的xsl,我曾经加入document_1.xmldocument_2.xmldocument.xml

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="ns">
<xsl:output method="xml" indent="yes"/>

<xsl:key name="kProdByName" match="product" use="name"/>

<xsl:template match="products">
<xsl:copy>

<xsl:variable name="msNodes">
    <xsl:apply-templates select="document('document_1.xml')/*/product|document('document_2.xml')/*/product">
    <xsl:sort select="Quantity" data-type="number"/>
    </xsl:apply-templates> 
</xsl:variable>

<xsl:apply-templates select="ns:node-set($msNodes)/product [generate-id() =  generate-id(key('kProdByName', name)[1])  ]"/>

</xsl:copy>
</xsl:template>


<xsl:template match="product">
   <product>
    <xsl:for-each select="key('kProdByName', name)">
      <xsl:if test="position() = 1">
        <xsl:copy-of select="node()"/>
      </xsl:if>
    </xsl:for-each>
   </product>
</xsl:template>

</xsl:stylesheet>

上述xsl的输出是

<products>
    <product>
        <name>Bag</name>
        <Quantity>2</Quantity>
    </product>
    <product>
        <name>Pencil</name>
        <Quantity>5</Quantity>
    </product>
    <product>
        <name>Pen</name>
        <Quantity>10</Quantity>
    </product>
    </product>

这里我需要删除 <Quantity>使用 xslt 1.0 从输出中获取节点

我需要如下输出

<products>
    <product>
        <name>Bag</name>
    </product>
    <product>
        <name>Pencil</name>
    </product>
    <product>
        <name>Pen</name>
    </product>
    </product> 

最佳答案

匹配 Quantity 的空模板应该可以做到:

<xsl:template match="Quantity"/>

关于xml - 如何使用 xslt 从文档方法中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9367570/

相关文章:

javascript - 使用 javascript 遍历 XML 节点

xml - "img"必须由匹配的结束标记终止

XSLT 联合或为 2 个不同的节点执行 foreach

xml - 如何让 PL/SQL 解析 Oracle 中的 XML 属性而不是 XML 元素?

python - 为什么我不能点击 Selenium 中的元素?

xml - XSLT 1.0 值查找映射

java - 如何在 Java 中将 SOAP 模板加载到 SOAP 消息中?

java - 了解 Java Soap 堆栈 - jaxb、jax-*、cfx 等

XSLT 1.0 贪婪背包分组方法?

java - Selenium:无法打印存储的 IMDB 热门电影和评级列表中的所有值