加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用PowerShell从xml的元标记中提取文本

发布时间:2020-12-16 22:39:35 所属栏目:百科 来源:网络整理
导读:使用以下xml文件,如何提取元标记的一些文本?例如,我想通过属性“role”属性从元标记中获取文本“aut”. ?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" pref
使用以下xml文件,如何提取元标记的一些文本?例如,我想通过属性“role”属性从元标记中获取文本“aut”.

<?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 &amp; 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>

我已经尝试使用chooseinglenode()方法,但没有成功:

[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

我也尝试过使用Select-XML:

[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']"

解决方法

标签定义了默认命名空间.您需要定义该默认命名空间或使用通配符来避免指定命名空间.后者更容易:

select-xml -xml $xml -xpath "//*[@property='role']/text()" | % { $_.Node.Value }

以下是一些参考:
http://blog.stevex.net/xpath-and-xml-namespaces/
http://huddledmasses.org/xpath-and-namespaces-in-powershell/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读