xmllint - 使用命名空间解析xml文件

时间:2013-10-17 11:32:22

标签: parsing namespaces xmllint

我在stackoverflow上发现了很多关于xmllint及其"名称空间支持"的主题。但没有人帮助我。

这是我的xml(准确的xsd)文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema">
    <xsd:annotation>
        <xsd:documentation>My Text</xsd:documentation>
    </xsd:annotation>
</xsd:schema>

我想要检索&#34;我的文字&#34;从这个文件链,所以我试试这个:

xmllint myfile.xsd --xpath "/*[namespace-uri()='http://www.w3.org/2001/XMLSchema' and 
name()='schema']/*[namespace-uri()='http://www.w3.org/2001/XMLSchema' and
name()='annotation']/*[namespace-uri()='http://www.w3.org/2001/XMLSchema' and
name()='documentation']/text()"

但它不起作用。我得到了#34;分段错误。&#34;

更新

我有另一个问题: 我应该使用什么来获取我的标记属性&#34; toto&#34;此文件中的值:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:toto="testAtributeValue">
    <xsd:annotation>
        <xsd:documentation>myText</xsd:documentation>
    </xsd:annotation>
</xsd:schema>

换句话说,我想得到&#34; testAtributeValue&#34;

1 个答案:

答案 0 :(得分:2)

您的XML无效,因为未声明“xsd”前缀(甚至在问题的第二个.version中编辑的命令输出中报告)。

您希望xmlns:xsd=不是xmlns=

name()也返回QName。您希望使用local-name()来匹配本地名称。