我正在尝试从XSLT中定义的XML文件中提取数据:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="example.com">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="sheet-uri" select="'path/to/some.xml'"/>
<xsl:param name="sheet-doc" select="document($sheet-uri)"/>
<!-- Template here -->
...
<xsl:for-each select="IsValid/time">
<Debug>
<xsl:variable name="referenced-code" select="$sheet-doc//Sheet/SomeData[time = current()]/id"/>
<xsl:choose>
<xsl:when test="$referenced-code">
<xsl:value-of select="$referenced-code"/>
</xsl:when>
<xsl:otherwise>-1</xsl:otherwise>
</xsl:choose>
</Debug>
...
来源xml:
<Data xmlns="example.com">
<id>21</id>
<IsValid>
<time>125622</time>
<time>094522</time>
<time>123456</time>
</IsValid>
</Data>
XML(some.xml
)如下所示:
<Sheet>
<SomeData>
<time>125622</time>
<id>1</id>
<SomeData>
<SomeData>
<time>094522</time>
<id>1</id>
<SomeData>
<SomeData>
<time>123456</time>
<id>0</id>
<SomeData>
</Sheet>
这始终会为-1
打印<Debug>
。为什么它不能正常工作?这在使用XSLT 1.0时工作正常。我正在尝试升级到2.0,所以我可以使用更多功能。
任何帮助将不胜感激,提前谢谢!
答案 0 :(得分:1)
指定时:
some.xml
这适用于所有您的XPath表达式。由于<xsl:variable name="referenced-code" select="$sheet-doc//Sheet/SomeData[time = current()]/id"/>
文件不使用此命名空间,因此您的变量为:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
结束为空。
答案 1 :(得分:1)
如果一个XML文档在命名空间中有元素但另一个没有,那么你显然无法在任何地方使用xpath-default-namespace
,但需要使用<xsl:variable name="referenced-code" xpath-default-namespace="" select="$sheet-doc//Sheet/SomeData[time = current()]/id"/>
。