【问题标题】:XSLT for filtering XML documents with javascriptXSLT 用于使用 javascript 过滤 XML 文档
【发布时间】:2011-10-24 10:32:35
【问题描述】:

我想使用某种 XML 过滤,使用带有 jQ​​uery 的 javascript。我对 xslt 还不是很熟悉。我已经看到总是有一个 XML 文档和该文档的特定样式 (XSL)。然后,结果以 XHTML 呈现。我真的只想获取一些 XML,过滤(按节点名称、某些属性等)并生成该 xml 的(过滤/更小的)版本。你认为 xslt 方法最简单吗?

提前致谢

【问题讨论】:

  • 如果输入是有效的 XML(通过解析器),那么是的,XSLT 对于转换 XML 文档非常方便。
  • 这可能会帮助你johannburkard.de/software/xsltjs
  • 感谢您的评论。我已经看过那个库,但不幸的是它缺乏适当的文档和示例:(

标签: jquery xml xslt filtering


【解决方案1】:

我真的只是想获取一些 XML,过滤器(按节点名称,一些 属性等)并生成该 xml 的(过滤/更小)版本。 你认为 xslt 方法最简单吗?

XSLT 是一种专门为转换树结构输入而设计的语言。这就是为什么它可能是实现此类任务的最佳和最简单的方法。

这是一个例子

<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 文档生成另一个具有相同结构和元素名称/内容的文档,但仅包含原始文档中的那些 num 元素,其值为 3 的倍数。

以下是实现此目的的转换

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="num[not(. mod 3) = 0]"/>
</xsl:stylesheet>

【讨论】:

  • 感谢您的回答!如何在 javascript 中动态配置我的转换,例如将变量传递给这个转换?再次感谢您
  • @jose:将参数传递给转换依赖于实现,必须阅读描述如何为正在使用的特定 XSLT 处理器执行此操作的文档。这对于 MSXML4 和 XslCompiledTransform 是不同的,而且,...
【解决方案2】:

如果您想处理一个 XML 文档并返回另一个 XML 文档,XSLT 方法可能是最好的。

如果您只想从 XML 中提取几个节点并显示它们,内置的 javascript 功能应该足够了。

var title = xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;

var lang = xmlDoc.getElementsByTagName("title")[0].getAttribute("lang");

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多