Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何基于一个属性为每个属性创建XSL?_Xml_Xslt_Attributes_Transformation - Fatal编程技术网

Xml 如何基于一个属性为每个属性创建XSL?

Xml 如何基于一个属性为每个属性创建XSL?,xml,xslt,attributes,transformation,Xml,Xslt,Attributes,Transformation,我需要从以下位置获取所有版本(0和1): 0 1. 我使用此XSL模板: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">

我需要从以下位置获取所有版本(0和1):


0
1.
我使用此XSL模板:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="LIB">
<xsl:for-each select="BOOK">
<xsl:for-each select="CHAPTER"> 
<xsl:value-of select="VERS"/>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

但只得到了第一个版本(0)

我如何才能为每个?基于
vnumber
存在,但如何


如果您知道一个很好的纯英语源代码,我愿意学习。

在XSLT1.0中,
xsl:value of
指令只返回所选节点集中第一个节点的字符串值

尝试以下方法:

<xsl:template match="/">
    <xsl:for-each select="LIB/BOOK/CHAPTER/VERS">
        <xsl:value-of select="." />
    </xsl:for-each>
</xsl:template>


您没有发布预期结果,因此我不确定您希望如何分离返回的值。

基本上,您对每个
使用了一个
。有多个
ver
es,因此您需要迭代这些

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:for-each select="LIB">
      <xsl:for-each select="BOOK">
        <xsl:for-each select="CHAPTER">
          <xsl:for-each select="VERS[@vnumber]">
            <xsl:value-of select="."/>
          </xsl:for-each>
        </xsl:for-each>
      </xsl:for-each>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

旁注:我认为您应该学习如何在XSLT中使用模板。假设您确实想对LIBs、书籍和章节做些什么,模板是实现这一点的方法,而不是像上面第一个示例中那样有一个深度嵌套的金字塔。

请原谅挑剔,但是
xsl:for each
不会迭代。@michael.hor257k不是吗?您喜欢哪个术语?从技术上讲,它为每个选定节点实例化一个模板。但是您可以只说流程(这也是XSLT2.0规范使用的术语)!我并没有崩溃,因为我还需要写一本书,一章(名字,数字)。是否有一个好的XSL备忘单在某个地方80%的时间都有效?不再是500页的指南:)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:for-each select="LIB">
      <xsl:for-each select="BOOK">
        <xsl:for-each select="CHAPTER">
          <xsl:for-each select="VERS[@vnumber]">
            <xsl:value-of select="."/>
          </xsl:for-each>
        </xsl:for-each>
      </xsl:for-each>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:for-each select="LIB/BOOK/CHAPTER/VERS[@vnumber]">
      <xsl:value-of select="." />
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>