programing

XPath를 통해 속성 노드 값 추출

powerit 2023. 9. 25. 23:10
반응형

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:string() 함수는 인수의 값을 다음과 같이 반환합니다.xs:string. 인수가 속성인 경우 속성의 값을 다음과 같이 반환합니다.xs:string.

위에서 답변한 바와 같이:

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

출력만 할 것입니다.name4의 속성child에 속한 노드Parent그 술어에 의하여 명기된.[@id=1]. 그러면 술어를 다음으로 변경해야 합니다.[@id=2]한 세트를 얻다child다음 노드Parent.

하지만 당신이 무시한다면,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 looking 결과로 반환할 수 없습니다.data() 함수를 사용하여 속성에서 데이터를 가져오는 것이 필요합니다.

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

이것은 요소가 2개의 속성을 가지고 있는 경우에 사용할 수 있으며, 우리는 다른 속성의 도움으로 하나의 속성을 얻을 수 있습니다.

네임스페이스가 있는 모든 xml에 local-name 사용

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

@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

XPath를 이용하여 속성과 텍스트의 값을 추출하는 표준 공식은 다음과 같습니다.

  1. 웹 요소의 속성 값을 추출하려면-

    요소XPath/@attributeName

  2. 웹 요소의 텍스트 값을 추출하려면-

    요소XPath/text()

당신의 경우 여기 xpath가 돌아옵니다.

//parent[@name='Parent_1']//child/@name

다음을 반환합니다.

Child_2
Child_4
Child_1
Child_3

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

반응형