cómo establecer valores predeterminados para atributos en xml

cómo establecer valores predeterminados para atributos en xml

¿Cómo configuro valores predeterminados para atributos en xml? Considere a continuación test.xml. Se ha definido un atributo 'género' con el valor predeterminado 'masculino' para el elemento 'a'. Sin embargo, no puedo recuperarlo usando xmlstarlet. ¿Estoy haciendo algo mal? Por favor ayuda.

<?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: (no imprime nada en la salida estándar)

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

Respuesta1

Su declaración del genderatributo con el valor predeterminado está bien. Debe ser algo con el selcomando xmlstartlet. O eso o cómo estás intentando usarlo. Aunque no sé mucho sobre xmlstarlet. Puede utilizar XSLT para verificar el valor predeterminado:

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

Línea de comando y salida(xmlstarlet en Windows)

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

información relacionada