【问题标题】:with namespace without namespace有命名空间没有命名空间
【发布时间】:2014-03-17 08:07:53
【问题描述】:

我有命名空间的xslt2.0转换问题,请帮助解决这个问题

很少有 XML 有命名空间属性,很少有 XML 没有命名空间属性。

文件 1:

<root id="BC" xmlns="http://www.example.com/ptktims"><child  xmlns="http://www.example.com/times"></child></root>

文件 2:

<root id="BC"><child></child></root>

当我调用命名空间&lt;xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xpath-default-namespace="http://www.example.com/"&gt; 时,第一个文件工作正常,但第二个文件不工作。

第二个文件工作正常,当我没有调用命名空间&lt;xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;,但第一个文件不工作。

请指教,如何将两种 XML 格式转换为 Single XSLT?

【问题讨论】:

  • 您的观察是正确的 - 一些 XML 文档具有名称空间,而另一些则没有。但是你的问题是什么?
  • 我需要从 Single XSLT 转换两个 XML。
  • 答案取决于您要应用的样式表。请1分享您的整个 XSLT 代码,2准确说明有多少 XML 文档以及它们有哪些命名空间,并3说明您的目标是:你想通过转型实现什么?

标签: xml xslt xpath namespaces xslt-2.0


【解决方案1】:

您有两个选择,使用通配符作为命名空间前缀:

<xsl:template match="*:root">
  <xsl:value-of select="*:child"/>
</xsl:template>

或为不同的命名空间编写匹配项,例如

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:ptktims="http://www.example.com/ptktims"
  xmlns:times="http://www.example.com/times" version="2.0">

    <xsl:template match="root">
      <xsl:value-of select="child"/>
    </xsl:template>

    <xsl:template match="ptktims:root">
      <xsl:value-of select="times:child"/>
    </xsl:template>

第三个选项是链接转换或转换步骤,其中第一步规范化命名空间(剥离全部或放置您想要的命名空间),然后第二步只需要使用规范化输入格式的模板。

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2012-12-31
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多