1

私は Javascript を使用しており、必要な結果を含む 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 での XQuery の組み込み実装はありません。

必要なものと一緒にご先祖様をお返ししたい。しかし、いくつかの結果が得られた場合にも機能するはずです..これはXPathを使用して実行できますか?

4

3 に答える 3

2

XPath はソース XML ドキュメントを変更できず、新しい XML ドキュメントを生成できません。

したがって、これには他のテクノロジーを使用する必要があります。XSLT は、このような変換を表現するために特別に設計された言語です。

<?xml-stylesheet ?>ほとんどのブラウザーでは、関連するPI (処理命令)によって識別される 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>
于 2010-11-03T13:09:52.233 に答える
0

一般に、XPath だけでそれを行うことはできません。これは単なる式言語です。XPath はノードを作成できず、ノードを選択することしかできません。(あなたが持っているように)一連のノードを選択できますが、それらを他のノードにラップすることはできません。

確かに@kadalmittaiの提案を変更し、DOM API を使用してノードを選択し、新しいドキュメントを作成して、選択したノードをそれに複製することができますが、かなり単純な要件を考えると、それはかなり重いものです。

ここでは XSLT の方が適切なアプローチかもしれませんが、ブラウザー テクノロジについて十分に理解していないため、ブラウザーでの使用方法を説明することはできません。

于 2010-11-03T10:41:27.067 に答える
0

Browser JavaScript Environment には、デフォルトの Xml Document Object Model Parser が付属しています。

そのコントロールを利用して、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.
于 2010-11-03T07:39:02.060 に答える