
Как задать значения по умолчанию для атрибутов в xml. Рассмотрим ниже test.xml. Атрибут 'gender' со значением по умолчанию 'male' был определен для элемента 'to'. Однако я не могу получить его с помощью 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>
Командная строка и вывод(xmlstarlet в Windows)
C:\apps\xmlstarlet-1.4.2>xml tr test.xsl test.xml
male