Question

J'ai un xml:

<Customer id="">
 <Name />
 <Address />
</Customer>

Je voudrais sélectionner uniquement un nœud racine avec ses attributs sans ses nœuds enfants:

<Customer id=""/ >

est-ce possible avec XPath?

Était-ce utile?

La solution

Non, cela est impossible dans XPath.

Vous ne pouvez pas sélectionnez le nœud sans ses enfants, parce que sans ses enfants, il serait un autre nœud, d'où vous ne seriez pas sélectionner un noeud à partir du document original.

Pour créer la sortie que vous voulez, vous devez utiliser une langue qui vous permet de créer de nouveaux nœuds, de sorte que vous ne pouvez pas le faire en XPath. Vous pouvez utiliser XQuery pour créer de nouveaux nœuds, cela devrait fonctionner:

element {fn:node-name(/*)} {/*/@*}

Autres conseils

XPath ne modifie pas un document XML source et c'est par la conception .

Pour produire un nouveau document XML à partir d'un existant, transformation est nécessaire.

XSLT a été spécialement conçu pour transformer un ensemble d'arbres (y compris des documents XML) dans les arbres de résultats.

Cette transformation :

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

    <xsl:template match="/*">
      <xsl:copy>
       <xsl:copy-of select="@*"/>
      </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

lorsqu'il est appliqué sur le document XML fourni :

<Customer id="">
    <Name />
    <Address />
</Customer>

produit le voulait, résultat correct :

<Customer id=""/>
$doc = new DOMDocument();
$doc->loadHTML($str);

$xPath = new DOMXpath($doc);
$xPathQuery = "//text()[contains(translate(.,'abcdefghijklmnopqrstuvwxyz',  'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), '<Customer id=\"\">')]";
$elements = $xPath->query($xPathQuery);

if($elements->length > 0){

foreach($elements as $element){
    print "Found: " .$element->nodeValue."<br />";
}

Cette expression XQuery:

element {name(/*)} {/*/@*}

Sortie:

<?xml version="1.0" encoding="UTF-8"?><Customer id=""/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top