
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 gender
Attributs mit dem Standardwert ist in Ordnung. Es muss etwas mit dem sel
Befehl 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