2015-10-28 39 views
0
<start> 
    <tag> dog=German shepherd|cat=has a lot of spots </tag> 
</start> 
<start> 
    <tag> cat=black cat|dog=Clifford </tag> 
</start> 

假设我有一个这样的XML文档,并希望通过它循环并选择cat和dog的值并使用XSL单独打印它们,应该如何去做?如何使用XSL从XML元素获取信息

+0

“*选择猫和狗的价值*”这还不够清楚。你想要提取哪个“猫”和“狗”(每个有两个)以及哪个标准? ---另外,由于这似乎是关于* tokenizing *的问题,请说明是否使用XSLT 1.0或2.0。 –

回答

0

给定一个结构良好的输入XML,如:

<root> 
    <start> 
     <tag> dog=German shepherd|cat=has a lot of spots </tag> 
    </start> 
    <start> 
     <tag> cat=black cat|dog=Clifford </tag> 
    </start> 
</root> 

和XSLT 2.0处理器,可以应用以下的样式表:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/root"> 
    <xsl:copy> 
     <xsl:for-each select="start/tokenize(tag, '\|')"> 
      <entry> 
       <key> 
        <xsl:value-of select="substring-before(., '=')" /> 
       </key> 
       <value> 
        <xsl:value-of select="substring-after(., '=')" /> 
       </value> 
      </entry> 
     </xsl:for-each> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

收到:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <entry> 
     <key> dog</key> 
     <value>German shepherd</value> 
    </entry> 
    <entry> 
     <key>cat</key> 
     <value>has a lot of spots </value> 
    </entry> 
    <entry> 
     <key> cat</key> 
     <value>black cat</value> 
    </entry> 
    <entry> 
     <key>dog</key> 
     <value>Clifford </value> 
    </entry> 
</root>