【问题标题】:XSLT: Getting XML namespace as an attributeXSLT:获取 XML 命名空间作为属性
【发布时间】:2013-10-04 06:16:01
【问题描述】:

我有以下 xml:

<article article-type="research-article">
<body>
<graphic xlink:href="zee9991370930006.g.eps"/>
<self-uri xlink:title="pdf" xlink:href="zee00813002857.pdf" />
</body>
</article>

我需要将其转换为:

<article article-type="research-article" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML">
<body>
<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="zee9991370930006.g.eps"/>
<self-uri xlink:title="pdf" xlink:href="zee00813002857.pdf" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</body>
</article>

我在 XSLT 2.0 中为每个需要命名空间属性的元素使用了以下命令:

<xsl:namespace name="xlink" select="'http://www.w3.org/1999/xlink'"/>
<xsl:namespace name="mml" select="'http://www.w3.org/1998/Math/MathML'"/>

但问题是我只为一个元素获取命名空间属性,即article。我也在 xslt 的开头声明了命名空间。无法弄清楚确切的问题是什么。任何形式的帮助将不胜感激。谢谢。

【问题讨论】:

  • 所以你在根中得到了你想要的命名空间,为什么你想要在任何其他节点中都一样?就用它吧!
  • 其实需求是这样的!
  • 希望您理解其中的含义! XSLT 由您的 XML 生成器应用以根据规范生成 XML。在根处定义它使其对其下的所有节点都可用,而在节点处定义使其仅对节点的子元素可用。
  • 虽然这不能回答您的问题,但我强烈建议重新查看这些要求,如果它在您的控制范围内,请更改它们! XML 生成器通常不应该做你想做的事..
  • 是的,先生。我需要它,并且我已经声明了它。但它不适用于其下的节点,即graphicself-uri 在我的情况下。

标签: xslt xml-namespaces


【解决方案1】:

XML 生成器不应该做你想做的事。他们将根据规范生成您的 XML。不建议您在所有使用它们的元素中定义相同的命名空间!这让它变得冗长、丑陋和怪异。

如果命名空间仅在顶部(根元素)定义,会有什么问题?您只能在需要它的元素中使用它。很简单。

OP 的评论:我需要它在根目录下并且我已经声明了它。但它不适用于它下面的节点,即在我的情况下是图形和 self-uri)。 您是否检查过您的 xml 格式是否正确?如果您在此处发布的是完整的 xml,那么图形和 self-uri 应该始终具有可用的命名空间。出于上述原因,您应该瞄准以下输出。

<article article-type="research-article" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML">
  <body>
    <graphic xlink:href="zee9991370930006.g.eps"/>
    <self-uri xlink:title="pdf" xlink:href="zee00813002857.pdf"/>
  </body>
</article>

【讨论】:

  • 没有健康问题。我同意你的第一点。但是你知道这些要求..我会考虑你的观点。
猜你喜欢
  • 2021-12-14
  • 2019-07-03
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
相关资源
最近更新 更多