como definir valores padrão para atributos em xml

como definir valores padrão para atributos em xml

Como defino valores padrão para atributos em xml. Considere abaixo test.xml. Um atributo 'gênero' com valor padrão 'masculino' foi definido para o elemento 'to'. No entanto, não consigo recuperá-lo usando xmlstarlet. Estou fazendo algo errado? Por favor ajude.

<?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: (não imprime nada no stdout)

xmlstarlet sel -T -t -m "//message/to" -v "@gender" -n test.xml

Responder1

Sua declaração do genderatributo com o valor padrão está correta. Deve ser algo com o selcomando xmlstartlet. Ou isso ou como você está tentando usá-lo. Eu não sei muito sobre xmlstarlet. Você pode usar XSLT para verificar o valor padrão:

Entrada XML(teste.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(teste.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>

Linha de comando e saída(xmlstarlet no Windows)

C:\apps\xmlstarlet-1.4.2>xml tr test.xsl test.xml
male

informação relacionada