Verwenden von PowerShell zum extrahieren von text aus einer xml-meta-tag
Mit der folgenden xml-Datei, wie kann ich extrahieren einige der meta-Tags text? Zum Beispiel, ich möchte den text "aut" aus dem meta-tag mit der Eigenschaft "role" - Attribut.
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="en" unique-identifier="pub- id" prefix="cc: http://creativecommons.org/ns#">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:title id="title">Moby-Dick</dc:title>
<meta refines="#title" property="title-type">main</meta>
<dc:creator id="creator">Herman Melville</dc:creator>
<meta refines="#creator" property="file-as">MELVILLE, HERMAN</meta>
<meta refines="#creator" property="role" scheme="marc:relators">aut</meta>
<dc:identifier id="pub-id">code.google.com.epub-samples.moby-dick-basic</dc:identifier>
<dc:language>en-US</dc:language>
<meta property="dcterms:modified">2012-01-18T12:47:00Z</meta>
<dc:publisher>Harper & Brothers, Publishers</dc:publisher>
<dc:contributor id="contrib1">Dave Cramer</dc:contributor>
<meta refines="#contrib1" property="role" scheme="marc:relators">mrk</meta>
<dc:rights>This work is shared with the public using the Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license.</dc:rights>
<link rel="cc:license" href="http://creativecommons.org/licenses/by-sa/3.0/"/>
<meta property="cc:attributionURL">http://code.google.com/p/epub-samples/</meta>
</metadata>
</package>
Ich habe versucht, mit der selectsinglenode () - Methode als solche mit keinen Erfolg:
[xml]$doc = get-content myxmlfile.xml
$node = $doc.selectsinglenode("/package/metadata/meta[@property='role']")
//and
$node = $doc.selectsinglenode("//meta[@property='role']")
//$node is null for both cases
Ich hab auch schon versucht mithilfe von Select-XML als solche:
[xml]$doc = get-content myxmlfile.xml
Select-Xml -xml $doc -Xpath "/package/metadata/meta[@property='role']"
//and
Select-Xml -xml $doc -Xpath "//meta[@property='role']"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den tag definiert den Standard-namespace. Sie müssen entweder zu definieren, dass ein default-namespace oder einen Platzhalter benutzen, um zu vermeiden, durch die Angabe eines Namensraums. Das letztere ist einfacher:
Hier sind ein paar Referenzen:
http://blog.stevex.net/xpath-and-xml-namespaces/
http://huddledmasses.org/xpath-and-namespaces-in-powershell/
Hier ist ein Weg, um die Rolle von Knoten :
Gibt es ein paar Methoden, hier ist einer:
Wäre sowohl die Rolle der Knoten. Bekommen nur die, die mit aut:
$foo.package.metadata.meta
es spielt keine Rolle, dasspackage
undmetadata
sind in verschiedenen namespaces. Mit XPath, tut es.Diese geben Sie den text in jeder der "meta" - Knoten:
Ausgabe: