2010-11-03 3 views
1

Я использую Javascript, и я хочу вернуть XML-документ с результатами, которые я хочу.Можно ли вернуть весь XML-документ с помощью XPath в javascript?

Например, документ 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, и, насколько мне известно, встроенных реализаций для XQuery в Javascript нет.

Я хочу вернуть предков вместе с тем, что мне нужно. Но он также должен работать, если я получаю несколько результатов. Это можно сделать с помощью XPath?

+0

Хороший вопрос, +1.См. Мой ответ для объяснения и решения с использованием XSLT. –

ответ

0

JavaScript-среда браузера Окружающая среда поставляется с по умолчанию Xml Document Object Model Parser.

Вы можете воспользоваться этим элементом управления и проанализировать его как Dom Parsing Style.

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. 
0

В общем, нет, вы не можете сделать это с XPath самостоятельно - это всего лишь язык выражений. XPath не может создавать узлы, они могут их выбирать. Вы можете (как у вас) выбрать набор узлов, но вы не сможете их обернуть в других узлах.

Вы, конечно, может варьироваться @ предложение kadalmittai и использовать DOM API для выбора ваших узлов, создать новый документ и клонировать выбранные узлы в него, но это довольно тяжеловес учитывая ваш довольно простое требование.

XSLT может быть лучшим подходом здесь, но я не знаю достаточно о технологиях браузера, чтобы рассказать вам, как использовать его в браузере.

2

XPath не может изменить исходный XML-документ и не может создать новый XML-документ.

Поэтому для этого необходимо использовать некоторые другие технологии. XSLT - это язык, специально предназначенный для wxpressing таких преобразований.

В большинстве браузеров можно обработать документ XML с помощью таблицы стилей XSLT, идентифицированных ассоциированных <?xml-stylesheet ?> PI (инструкции processong).

Большинство браузеров также предлагают некоторый способ инициирования преобразования XSLT в Javascript - ознакомьтесь с документацией к вашему браузеру.

Сам 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> 
+0

Хороший ответ. Я предположил, что ему нужен программный интерфейс, так что '' Не будет вариантом. Мои знания javascript-кодирования ... антиквариат. –