So legen Sie Standardwerte für Attribute in XML fest

So legen Sie Standardwerte für Attribute in XML fest

Wie lege ich Standardwerte für Attribute in XML fest? Sehen Sie sich test.xml unten an. Für das Element „an“ wurde ein Attribut „Geschlecht“ mit dem Standardwert „männlich“ definiert. Ich kann es jedoch nicht mit xmlstarlet abrufen. Mache ich etwas falsch? Bitte helfen Sie.

<?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: (druckt nichts auf stdout)

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

Antwort1

Ihre Deklaration des genderAttributs mit dem Standardwert ist in Ordnung. Es muss etwas mit dem selBefehl von xmlstartlet zu tun haben. Entweder das oder wie Sie versuchen, es zu verwenden. Ich weiß allerdings nicht viel über xmlstarlet. Sie können XSLT verwenden, um den Standardwert zu überprüfen:

XML-Eingabe(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>

Befehlszeile und Ausgabe(xmlstarlet unter Windows)

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

verwandte Informationen