xmllint不返回属性的默认值

时间:2018-03-22 11:26:38

标签: xml linux bash xmllint

我正在使用xmllint来读取XML文件。

这是XML Schema定义(schema.xsd)

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="machine">
    <xs:complexType>
      <xs:sequence>  
        <xs:element name="interface" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="default_ip" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>                   
            <xs:attribute name="name" type="xs:string" use="required"/>
            <xs:attribute name="enable_ipv6" default="yes">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="yes"/>
                  <xs:enumeration value="no"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:complexType>
        </xs:element>    
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

这是我正在尝试阅读的XML文件(file.xml):

<?xml version="1.0" encoding="UTF-8" ?>
<machine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="schema.xsd">

  <interface name="eth1" enable_ipv6="yes">
    <default_ip>10.10.10.1/24</default_ip>
  </interface>

  <interface name="wlan0">
    <default_ip>20.20.20.1/24</default_ip>
  </interface>

</machine>

XML文件针对XSD文件正确验证:

user@debian:~/Desktop/xml-example$ xmllint --noout --schema schema.xsd file.xml 
file.xml validates

我遇到的问题是,当我尝试读取尚未在XML文件中设置但在XSD文件中设置了默认值的属性时,xmllint不会读取它。

例如,xmllint可以读取第一个接口(eth1)的属性“enable_ipv6”的值:

user@debian:~/Desktop/xml-example$ xmllint --xpath 'string(/machine/interface[1]/@enable_ipv6)' file.xml 
yes

但是在尝试读取第二个接口(wlan0)的相同属性时没有返回任何内容:

user@debian:~/Desktop/xml-example$ xmllint --xpath 'string(/machine/interface[2]/@enable_ipv6)' file.xml 
user@debian:~/Desktop/xml-example$ 

根据XSD文件定义,由于尚未在XML文件中设置该属性,因此xmllint应返回默认值,即“是”,但它没有这样做。

我做错了吗?

0 个答案:

没有答案