-2

我正在尝试通过 XSLT 转换将 XML 文档解析为网站。

但是,要使其工作,我必须使用以下 XPath:

/*[name()='standards']/*[name() = 'standard']

为什么以下 XPath 表达式不起作用?

/standards/standard
4

2 回答 2

2

您的问题是 XPath 中最常见的问题——搜索 XPath 和默认命名空间,您会找到很多好的答案。

总结问题:XPath 将任何无前缀的名称解释为属于“无命名空间”。

因此,不会选择任何 XPath 表达式中属于某个默认命名空间(不是“无命名空间”)的任何无前缀名称。

在定位步骤中继续使用名称的一种方法是向 XPath 处理器指示特定前缀(例如“x”)与默认名称空间相关联。然后发出:

/x:standards/x:standard

在 .NET中,此类命名空间绑定(称为“命名空间注册”)是使用XmlNamespaceManager类完成的。请参阅此完整示例

在 XSLT中,只需在全局级别定义名称空间,然后指定 XPath 表达式,其中每个元素名称都以这样定义的前缀作为前缀。

这是一个小例子:

<nums xmlns="some:nums">
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>10</num>
</nums>

为了处理上面的 XML 文档,我们有这个

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:x="some:nums">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/">
     <xsl:value-of select="/x:nums/x:num[. = 3]"/>
 </xsl:template>
</xsl:stylesheet>

将此转换应用于上述 XML 文档可以正确选择所需元素并输出其字符串值

03
于 2012-07-30T11:59:45.343 回答
1

我不知道你的问题是什么。随便一刀,也许这就是你想要的……

<xsl:stylesheet version="1.0"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:ikas="http://www.ikas.dk"
  exclude-result-prefixes="msxsl ikas">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
 <div xmlns="http://www.ikas.dk">
  <textarea>
   <xsl:copy-of select="/ikas:standards/ikas:standard"/>
  </textarea>
 </div>
</xsl:template>

</xsl:stylesheet>
于 2012-07-30T11:50:27.367 回答