我可以在JavaScript中使用XPath返回整个XML文档吗?
我正在使用JavaScript,并且想要返回一个带有我想要的结果的XML文档。我可以在JavaScript中使用XPath返回整个XML文档吗?
例如,XML文档可以是 <books> <book> <title> Introduction to XML </title> </book> <book> <title> Introduction to Javascript </title> </book> </books>
,并使用该XPath表达式: //book[./title="Introduction to XML"]
我想这样的 <books> <book> <title> Introduction to XML </title> </book> </books>
的文档,我知道的XQuery听起来像这里的解决方案,但我正在使用JavaScript,而据我所知,JavaScript中没有内置实现。
我想回报祖先以及我需要的东西。但是,如果我得到几个结果它也应该工作..这是可以使用XPath吗?
浏览器JavaScript环境附带默认的Xml文档对象模型解析器。
您可以利用该控件并将其解析为Dom分析样式。
enter code here
var _xml = "<books> <book> <title> Introduction to XML </title> </book> </books>"
parser=new DOMParser();
xmlDoc=parser.parseFromString(_xml,"text/xml");
//Use any type of DOM API to parse
xmlDoc.childNodes()......
This code is for FireFox Browser. You can do the same thing in IE using their ActiveXControls as like XmlHttp way.
一般来说,你不能用XPath自己做 - 它只是一种表达式语言。 XPath无法创建节点,只能选择它们。您可以(如您所见)选择一组节点,但不能将它们包裹在其他节点中。
你当然可以变化 @ kadalmittai的建议,并使用DOM API来选择节点,创建一个新的文件,并复制你选择的节点进入,但给你的相当简单的要求是相当的重量级。
XSLT可能是一个更好的方法,但我对浏览器技术知之甚少,无法告诉您如何在浏览器中使用它。
XPath无法更改源XML文档,也无法生成新的XML文档。
因此,一些其他技术必须用于此。 XSLT是一种专门用于wxpressing这种转换的语言。
在大多数浏览器可以处理与通过关联<?xml-stylesheet ?>
PI(processong指令)标识的XSLT样式表的XML文档。
大多数浏览器还提供了一些在JavaScript中启动XSLT转换的方法 - 阅读您的浏览器文档。
XSLT转换本身是很简单的:
<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:param name="pTitleWanted" select="' Introduction to XML '"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="books">
<xsl:copy>
<xsl:apply-templates select="book[title = $pTitleWanted]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
当这种转变被应用到所提供的XML文档:想要的,正确的结果产生
<books>
<book>
<title> Introduction to XML </title>
</book>
<book>
<title> Introduction to Javascript </title>
</book>
</books>
:
<books>
<book>
<title> Introduction to XML </title>
</book>
</books>
好的答案 - 我认为他需要一些编程接口,这样''不会成为一个选项。我对JavaScript编码的知识是......古董。 – 2010-11-03 14:40:00
好问题,+1。请参阅我的回答以获取解释并了解使用XSLT的解决方案。 – 2010-11-03 13:12:21