XML의 속성에 대한 기본값을 설정하는 방법

XML의 속성에 대한 기본값을 설정하는 방법

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기본값을 사용하여 속성 을 선언하는 것은 괜찮습니다. selxmlstartlet 명령을 사용하는 것이어야 합니다 . 그게 아니면 어떻게 사용하려고 하는 건지. 하지만 나는 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

관련 정보