我和xslt一起,遇到了一个问题(我刚接触过这个问题)。我在名为gmlMember
的变量中有一些xml,以及一个名为var_FeatureClassName
的变量,其中包含" BES_VANDLOEB"
xml看起来像这样(包含在gmlMember中):
<dmp:BES_VANDLOEB gml:id="BES_VANDLOEB.52626" xmlns:gml="http://www.opengis.net/gml" xmlns:dmp="https://arealinformation.miljoeportal.dk/gis/services/DAIdb/MapServer/WFSServer">
<dmp:OBJECTID>94808</dmp:OBJECTID>
<dmp:Temakode>2014</dmp:Temakode>
<dmp:Temanavn>Beskyttede vandløb</dmp:Temanavn>
<dmp:Objekt_id>{D2BDC519-5374-11E2-B629-00155D01E765}</dmp:Objekt_id>
<dmp:Version_id>{F744FAB7-04A4-4DAE-8A03-A765D86CEA52}</dmp:Version_id>
<dmp:Systid_fra>2006-12-31T23:59:00</dmp:Systid_fra>
<dmp:Oprettet>2006-12-31T23:59:00</dmp:Oprettet>
</dmp:BES_VANDLOEB>
我需要获取gml:id =&#34; BES_VANDLOEB.52626&#34;
我尝试了以下各种各样的事情:
<xsl:variable name="gmlId">
<xsl:value-of select="$gmlMember/$var_FeatureClassName/@gml:id"/>
</xsl:variable>
这不起作用。有谁知道我怎么能得到它?
答案 0 :(得分:1)
我希望我理解正确:
这里是xslt示例: https://xsltfiddle.liberty-development.net/gWcDMer/3
Xslt代码:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gml="http://www.opengis.net/gml" xmlns:dmp="https://arealinformation.miljoeportal.dk/gis/services/DAIdb/MapServer/WFSServer">
<xsl:template match="/">
<xsl:variable name="gmlMember" select="."/>
<xsl:variable name="var_FeatureClassName" select="'dmp:BES_VANDLOEB'" />
<xsl:variable name="gmlId">
<xsl:value-of select="$gmlMember//*[name()=$var_FeatureClassName]/@gml:id"/>
</xsl:variable>
<id>
<xsl:value-of select="$gmlId"/>
</id>
</xsl:template>
</xsl:stylesheet>
Xml输入:
<root>
<dmp:BES_VANDLOEB gml:id="BES_VANDLOEB.52626" xmlns:gml="http://www.opengis.net/gml" xmlns:dmp="https://arealinformation.miljoeportal.dk/gis/services/DAIdb/MapServer/WFSServer">
<dmp:OBJECTID>94808</dmp:OBJECTID>
<dmp:Temakode>2014</dmp:Temakode>
<dmp:Temanavn>Beskyttede vandløb</dmp:Temanavn>
<dmp:Objekt_id>{D2BDC519-5374-11E2-B629-00155D01E765}</dmp:Objekt_id>
<dmp:Version_id>{F744FAB7-04A4-4DAE-8A03-A765D86CEA52}</dmp:Version_id>
<dmp:Systid_fra>2006-12-31T23:59:00</dmp:Systid_fra>
<dmp:Oprettet>2006-12-31T23:59:00</dmp:Oprettet>
</dmp:BES_VANDLOEB>
<dmp:SOME_VANDLOEB gml:id="BES2126" xmlns:gml="http://www.opengis.net/gml" xmlns:dmp="https://arealinformation.miljoeportal.dk/gis/services/DAIdb/MapServer/WFSServer">
<dmp:OBJECTID>94808</dmp:OBJECTID>
<dmp:Temakode>2014</dmp:Temakode>
<dmp:Temanavn>Beskyttede vandløb</dmp:Temanavn>
<dmp:Objekt_id>{D2BDC519-5374-11E2-B629-00155D01E765}</dmp:Objekt_id>
<dmp:Version_id>{F744FAB7-04A4-4DAE-8A03-A765D86CEA52}</dmp:Version_id>
<dmp:Systid_fra>2006-12-31T23:59:00</dmp:Systid_fra>
<dmp:Oprettet>2006-12-31T23:59:00</dmp:Oprettet>
</dmp:SOME_VANDLOEB>
</root>
输出:
<id xmlns:gml="http://www.opengis.net/gml" xmlns:dmp="https://arealinformation.miljoeportal.dk/gis/services/DAIdb/MapServer/WFSServer">BES_VANDLOEB.52626</id>
答案 1 :(得分:0)
XPath中的变量表示值,而不是表达式的片段(它不是宏语言)。因此,$a/$b
表示“$a
中的每个值都会返回$b
的值”。因此,如果$a
包含6个节点,并且$b
包含字符串'className',则结果将是包含6次出现的字符串'className'的序列。如果您希望结果等同于表达式$a/className
的结果,那么您应该编写$a/*[name()='className']
(或者对其进行一些改进以将名称空间考虑在内)。
(此解释适用于XSLT 2.0 / 3.0。在XSLT 1.0中,编写$a/$b
是一个静态错误,它不是一个有效的表达式。这就是为什么我要求你告诉我们它是如何失败的。)