
XML의 속성에 대한 기본값을 어떻게 설정합니까? 아래 test.xml을 고려하십시오. 기본값이 'male'인 'gender' 속성이 'to' 요소에 정의되었습니다. 그러나 xmlstarlet을 사용하여 검색할 수 없습니다. 내가 뭔가 잘못하고 있는 걸까? 도와주세요.
<?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: (표준 출력에 아무 것도 인쇄하지 않습니다)
xmlstarlet sel -T -t -m "//message/to" -v "@gender" -n test.xml
답변1
gender
기본값을 사용하여 속성 을 선언하는 것은 괜찮습니다. sel
xmlstartlet 명령을 사용하는 것이어야 합니다 . 그게 아니면 어떻게 사용하려고 하는 건지. 하지만 나는 xmlstarlet에 대해 잘 모릅니다. XSLT를 사용하여 기본값을 확인할 수 있습니다.
XML 입력(테스트.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(테스트.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>
명령줄 및 출력(Windows의 경우 xmlstarlet)
C:\apps\xmlstarlet-1.4.2>xml tr test.xsl test.xml
male