如何从节点中避免多个文本值

时间:2016-10-01 03:38:08

标签: xml xslt

如何避免节点中的多个文本值。我已经编写了逻辑,我的代码工作正常,我按照预期的输出得到结果但是对于预期的输出有没有不同的方法。

输入:

<?xml version="1.0" encoding="UTF-8"?>
<Customer>
<name>
<Id>1AZlzxIAD 001AZlzxIyyy</Id>
<phone>1</phone>
</name>
<name>
<Id>1AZlzxIAD 001AZlzxIyyy 001AZl</Id>
<phone>8</phone>
</name>
<name>
<Id>0zyIAD</Id>
<phone>3</phone>
</name>
<name>
<Id>IAT</Id>
<phone>5</phone>
</name>
<name>
<Id>zXIAT</Id>
<phone>9</phone>
</name>

代码:

       <xsl:template match="/">
       <Customer>
            <xsl:for-each select="Customer/name">
                <xsl:if test="not(contains(Id, ' '))">
                    <xsl:copy-of select="."/>
                </xsl:if>
            </xsl:for-each>
       </Customer>
    </xsl:template>
    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>

预期产出:

<?xml version="1.0" encoding="UTF-8"?>
<Customer>
<name>
  <Id>0zyIAD</Id>
  <phone>3</phone>
</name>
<name>
  <Id>IAT</Id>
  <phone>5</phone>
</name>
<name>
  <Id>zXIAT</Id>
  <phone>9</phone>
</name>
</Customer>

1 个答案:

答案 0 :(得分:0)

您可以将当前<xsl:template match="/">...</xsl:template>替换为:

<xsl:template match="name[contains(Id, ' ')]"/>