我正在使用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应返回默认值,即“是”,但它没有这样做。
我做错了吗?