2010-09-14 5 views

Répondre

2

Non, cela n'est pas possible dans XPath.

Vous ne pouvez pas sélectionner 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 souhaitée, vous devez utiliser un langage qui vous permet de créer de nouveaux nœuds, vous ne pouvez donc pas le faire dans XPath. Vous pouvez utiliser XQuery pour créer de nouveaux nœuds, cela devrait fonctionner:

element {fn:node-name(/*)} {/*/@*} 
0
$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 />"; 
} 
+0

Merci pour une réponse, mais j'ai besoin de construire XPath, puisque je fais les choses en T-SQL. Quelque chose comme: sélectionnez @ XmlData.query ('/ [nochildrenhere]') – Tim

+0

Aah ok, alors je ne peux pas vous aider, désolé! – Jordy

2

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

Pour produire un nouveau document XML à partir d'un document existant, la transformation est nécessaire. XSLT a été spécialement conçu pour transformer un ensemble d'arbres (y compris les documents XML) en arborescences 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 résultat souhaité, correct:

<Customer id=""/> 
0

Cette expression XQuery:

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

Sortie:

<?xml version="1.0" encoding="UTF-8"?><Customer id=""/> 
Questions connexes