首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取引用xml中idref的标记的内容

如何获取引用xml中idref的标记的内容
EN

Stack Overflow用户
提问于 2013-01-26 14:06:52
回答 2查看 3.1K关注 0票数 0

我正在试着得到正在演奏的selecao的名字,就像在<jogo numero="1">中,我想从IDREF s1获得PAIS的名字,那就是Franca。

在xpath: //id(@ pais )中进行查询,并返回Franca和塞内加尔,好吧,这两个是唯一有IDREF pais的。但是,我将这个表达式放入xsl中,但不起作用。

有人知道错误在哪里?

这是我的密码:

XML

代码语言:javascript
复制
    <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="file:///C:/Users/Cesar%20Frantz/Desktop/XML/trabalhoxml.xsl"?>
<Bolaocopa xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///C:/Users/Cesar%20Frantz/Desktop/exemplo.xsd">
    <grupos>
        <grupo tipo="A">
            <pais id="s1">Franca</pais>
            <pais id="s2">Senegal</pais>
            <pais id="s3">Uruguai</pais>
            <pais id="s4">Dinamarca</pais>
        </grupo>
    </grupos>
    <jogos>
        <faseGrupos>
            <jogoGrupo id="a">
                <jogo numero="1">
                    <selecao pais="s1">0</selecao>
                    <selecao pais="s2">1</selecao>
                </jogo>
            </jogoGrupo>
        </faseGrupos>
    </jogos>
</Bolaocopa>

XSL:

代码语言:javascript
复制
 <?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">



<xsl:template match="/">
  <html>
  <body>

<xsl:value-of select="//id(@pais)"/>

  </body>
  </html>
</xsl:template>

</xsl:stylesheet>

模式:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2013 sp1 (x64) (http://www.altova.com) by Cesar (UNIFRA - Franciscan University Center) -->
<!--W3C Schema generated by XMLSpy v2013 sp1 (x64) (http://www.altova.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:simpleType name="ST_selecao">
        <xs:restriction base="xs:int">
            <xs:enumeration value="0"/>
            <xs:enumeration value="1"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="ST_pais">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Dinamarca"/>
            <xs:enumeration value="Franca"/>
            <xs:enumeration value="Senegal"/>
            <xs:enumeration value="Uruguai"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="AT_6">
        <xs:restriction base="xs:string">
            <xs:enumeration value="s1"/>
            <xs:enumeration value="s2"/>
            <xs:enumeration value="s3"/>
            <xs:enumeration value="s4"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="AT_5">
        <xs:restriction base="xs:string">
            <xs:enumeration value="A"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="AT_3">
        <xs:restriction base="xs:string">
            <xs:enumeration value="s1"/>
            <xs:enumeration value="s2"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="AT_2">
        <xs:restriction base="xs:int">
            <xs:enumeration value="1"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="AT_1">
        <xs:restriction base="xs:string">
            <xs:enumeration value="a"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="T_selecao">
        <xs:simpleContent>
            <xs:extension base="ST_selecao">
                <xs:attribute ref="pais"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="T_pais">
        <xs:simpleContent>
            <xs:extension base="ST_pais">
                <xs:attribute name="id" type="xs:ID" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="T_jogos">
        <xs:sequence>
            <xs:element ref="faseGrupos"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="T_jogoGrupo">
        <xs:sequence>
            <xs:element ref="jogo"/>
        </xs:sequence>
        <xs:attribute name="id" type="AT_1" use="required"/>
    </xs:complexType>
    <xs:complexType name="T_jogo">
        <xs:sequence>
            <xs:element ref="selecao" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute ref="numero" use="required"/>
    </xs:complexType>
    <xs:complexType name="T_grupos">
        <xs:sequence>
            <xs:element ref="grupo"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="T_grupo">
        <xs:sequence>
            <xs:element ref="pais" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute ref="tipo" use="required"/>
    </xs:complexType>
    <xs:complexType name="T_faseGrupos">
        <xs:sequence>
            <xs:element ref="jogoGrupo"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="T_Bolaocopa">
        <xs:sequence>
            <xs:element ref="grupos"/>
            <xs:element ref="jogos"/>
        </xs:sequence>
    </xs:complexType>
    <xs:attribute name="tipo" type="AT_5"/>
    <xs:attribute name="pais" type="xs:IDREF"/>
    <xs:attribute name="numero" type="AT_2"/>
    <xs:element name="selecao" type="T_selecao"/>
    <xs:element name="pais" type="T_pais"/>
    <xs:element name="jogos" type="T_jogos"/>
    <xs:element name="jogoGrupo" type="T_jogoGrupo"/>
    <xs:element name="jogo" type="T_jogo"/>
    <xs:element name="grupos" type="T_grupos"/>
    <xs:element name="grupo" type="T_grupo"/>
    <xs:element name="faseGrupos" type="T_faseGrupos"/>
    <xs:element name="Bolaocopa" type="T_Bolaocopa"/>
</xs:schema>
EN

回答 2

Stack Overflow用户

发布于 2013-01-26 14:11:51

编辑:在再次阅读您的问题之后,我猜您希望检索由selecao节点引用的pais节点的文本值。

为此,我将采取以下行动:

代码语言:javascript
复制
<xsl:template match="selecao">
    <xsl:variable name="pais" select="@pais" />
    <p>
        <xsl:value-of select="/Bolaocopa/grupos/grupo/pais[@id = $pais]" />
    </p>
</xsl:template>
票数 2
EN

Stack Overflow用户

发布于 2013-01-26 14:23:08

听起来这就是你想要的

代码语言:javascript
复制
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:key name="pais" match="pais" use="@id"/>

  <xsl:template match="/">
    <html>
      <body>
        <xsl:apply-templates select="//selecao"/>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="selecao">
    <p>
      <xsl:value-of select="key('pais', @pais)"/>
    </p>
  </xsl:template>

</xsl:stylesheet>

这将产生输出:

代码语言:javascript
复制
<html>
  <body>
    <p>Franca</p>
    <p>Senegal</p>
  </body>
</html>

正如XPath规范所说,

如果文档没有DTD,那么文档中的任何元素都不会有唯一的ID。

因此,您必须有一个DTD才能使用id()函数。我认为在这里做一个DTD太费劲了,所以上面的XPath表达式应该足够了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14537659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档