IT story

XPath를 통해 속성 노드 값 추출

hot-time 2020. 4. 7. 08:30
반응형

XPath를 통해 속성 노드 값 추출


XPath를 통해 속성 노드의 값을 추출하려면 어떻게해야합니까?

샘플 XML 파일은 다음과 같습니다.

<parents name='Parents'>
  <Parent id='1' name='Parent_1'>
    <Children name='Children'>
      <child name='Child_2' id='2'>child2_Parent_1</child>
      <child name='Child_4' id='4'>child4_Parent_1</child>
      <child name='Child_1' id='3'>child1_Parent_1</child>
      <child name='Child_3' id='1'>child3_Parent_1</child>
    </Children>
  </Parent>
  <Parent id='2' name='Parent_2'>
    <Children name='Children'>
      <child name='Child_1' id='8'>child1_parent2</child>
      <child name='Child_2' id='7'>child2_parent2</child>
      <child name='Child_4' id='6'>child4_parent2</child>
      <child name='Child_3' id='5'>child3_parent2</child>
    </Children>
  </Parent>
</parents>

지금 까지이 XPath 문자열이 있습니다.

//Parent[@id='1']/Children/child[@name]  

child요소 만 반환 하지만 name속성 값을 원합니다 .

샘플 XML 파일의 출력 결과는 다음과 같습니다.

Child_2
Child_4
Child_1
Child_3

//Parent[@id='1']/Children/child/@name 

원본 child[@name]child속성이있는 요소 의미 합니다 name. 당신은 원합니다 child/@name.


속성 이름없이 값만 얻으려면 string()다음을 사용하십시오 .

string(//Parent[@id='1']/Children/child/@name)

FN : 문자열 () fucntion는 인수의 값을 반환합니다 xs:string. 인수가 속성 인 경우 속성 값을로 반환합니다 xs:string.


위에서 답변 한대로 :

//Parent[@id='1']/Children/child/@name 

술어로 지정된 name4 개의 child노드 속성 만 출력합니다 . 그런 다음 술어를 변경 하여 다음 노드 세트를 가져와야합니다 .Parent[@id=1][@id=2]childParent

그러나 Parent노드를 모두 무시 하고 다음을 사용하는 경우 :

//child/@name

한 번 name에 모든 child노드의 속성을 선택할 수 있습니다 .

name="Child_2"
name="Child_4"
name="Child_1"
name="Child_3"
name="Child_1"
name="Child_2"
name="Child_4"
name="Child_3"

사용해야합니다 //Parent[@id='1']/Children/child/data(@name)

속성을 직렬화 할 수 없으므로 XML 결과로 반환 할 수 없습니다. 당신이해야 할 일은 data () 함수를 사용하여 속성에서 데이터를 얻는 것입니다.


//Parent/Children[@  Attribute='value']/@Attribute

element에 2 개의 속성이있는 경우 사용할 수 있으며 다른 속성을 사용하여 하나의 속성을 얻을 수 있습니다.


@ryenus, 결과를 반복해야합니다. 이것이 내가 vbscript에서하는 방법입니다.

Set xmlDoc = CreateObject("Msxml2.DOMDocument")
xmlDoc.setProperty "SelectionLanguage", "XPath"
xmlDoc.load("kids.xml")

'Remove the id=1 attribute on Parent to return all child names for all Parent nodes
For Each c In xmlDoc.selectNodes ("//Parent[@id='1']/Children/child/@name")
    Wscript.Echo c.text
Next

네임 스페이스가있는 모든 XML에 대해 local-name ()을 사용하십시오.

//*[local-name()='Parent'][@id='1']/*[local-name()='Children']/*[local-name()='child']/@name 

참고 URL : https://stackoverflow.com/questions/4835891/extract-value-of-attribute-node-via-xpath

반응형