仅从xml文件中获取该产品下没有项目的产品

时间:2016-08-10 14:29:10

标签: xslt-1.0 xslt-2.0

我有一个包含产品和商品的xml文件。产品可能有也可能没有产品。我想只获得那些没有物品的产品。

这是我的输入

<?xml version="1.0" encoding="UTF-8"?>
<products>
    <product>
        <prod-id>P16753</prod-id>
        <product-status>CREATED</product-status>
        <validation-status>Valid</validation-status>
        <duplication-status>Unique</duplication-status>
        <content-status>New</content-status>
        <items/>

        <created-on>2016-08-12T11:30:00</created-on>
        <created-by>Administrator</created-by>
        <last-changed-on>2016-08-04T17:34:00</last-changed-on>
        <last-changed-by>ap0712</last-changed-by>
        <delete>false</delete>
    </product>
    <product>

        <prod-id>P16754</prod-id>
        <product-status>CREATED</product-status>
        <validation-status>Valid</validation-status>
        <duplication-status>Unique</duplication-status>
        <content-status>New</content-status>
        <items>
            <item>
                <item-id>i16754</item-id>
                <item-status>CREATED</item-status>
                <validation-status>Valid</validation-status>
                <duplication-status>Unique</duplication-status>
                <content-status>New</content-status>
            </item>
        </items>

        <created-on>2016-08-12T11:30:00</created-on>
        <created-by>Administrator</created-by>
        <last-changed-on>2016-08-04T17:34:00</last-changed-on>
        <last-changed-by>ap0712</last-changed-by>
        <delete>false</delete>
    </product>
</products>

我想在xml文件中输出这样的输出。如果可能的话,我希望删除标签,以便以后可以转换为csv文件

prod-id P16754

我有一个xslt代码(我从这个论坛得到的)但是我无法完成这项工作

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">


<ns:WhiteList>
  <name>prod-id</name>
 </ns:WhiteList>

<xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match=
  "*[not(descendant-or-self::*[name()=prod-id[not(items/item)]document('')/*/ns:WhiteList/*])]"/>

</xsl:transform> 

1 个答案:

答案 0 :(得分:0)

如果您使用

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="text"/>

    <xsl:template match="/">
        <xsl:value-of select="products/product[not(items/item)]/prod-id/concat(local-name(), ' ', .)" separator="&#10;"/>
    </xsl:template>

</xsl:transform>

然后输入样本输出

prod-id P16753

在线示例位于http://xsltransform.net/pPJ8LUP