como definir valores padrão para atributos no xml

0

Como faço para definir valores padrão para atributos em xml. Considere abaixo o test.xml. Um atributo 'gender' com valor padrão 'male' 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 para stdout)

xmlstarlet sel -T -t -m "//message/to" -v "@gender" -n test.xml
    
por Kaushik 08.05.2013 / 08:53

1 resposta

0

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

Entrada 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 (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
    
por 08.05.2013 / 19:42

Tags