Как мне установить значения по умолчанию для атрибутов в XML. Рассмотрим ниже test.xml. Атрибут «пол» со значением по умолчанию «мужской» был определен для элемента «до». Однако я не могу получить его с помощью 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 ответ1

0

Ваша декларация атрибута gender со значением по умолчанию в порядке. Это должно быть что-то с командой sel xmlstartlet. Либо это, либо как вы пытаетесь это использовать. Я не знаю много о xmlstarlet, хотя. Вы можете использовать XSLT для проверки значения по умолчанию:

Ввод XML (test.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 (test.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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .