如何在 xml 中设置属性的默认值。考虑下面的 test.xml。元素“to”已定义一个默认值为“male”的属性“gender”。但是我无法使用 xmlstarlet 检索它。我做错了什么吗?请帮忙。
<?xml version="1.0"?>
<!DOCTYPE message [
<!ELEMENT message (to,from,subject,text)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT text (#PCDATA)>
<!ATTLIST to gender CDATA "male">
]>
<message>
<to>Dave</to>
<from>Susan</from>
<subject>Reminder</subject>
<text>Dont forget to buy milk on the way home.</text>
</message>
xmlstarlet cmd:(不向标准输出打印任何内容)
xmlstarlet sel -T -t -m "//message/to" -v "@gender" -n test.xml
答案1
gender
您使用默认值声明属性是没有问题的。它一定是sel
xmlstartlet 命令的某个东西。要么是那样,要么是您尝试使用它的方式。不过,我对 xmlstarlet 了解不多。您可以使用 XSLT 来验证默认值:
XML 输入(测试.xml)
<!DOCTYPE message [
<!ELEMENT message (to,from,subject,text)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT subject (#PCDATA)>
<!ELEMENT text (#PCDATA)>
<!ATTLIST to gender CDATA "male">
]>
<message>
<to>Dave</to>
<from>Susan</from>
<subject>Reminder</subject>
<text>Dont forget to buy milk on the way home.</text>
</message>
XSLT 1.0(测试.xsl)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:value-of select="to/@gender"/>
</xsl:template>
</xsl:stylesheet>
命令行和输出(Windows 上的 xmlstarlet)
C:\apps\xmlstarlet-1.4.2>xml tr test.xsl test.xml
male