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
술어로 지정된 name
4 개의 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 결과로 반환 할 수 없습니다. 당신이해야 할 일은 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
'IT story' 카테고리의 다른 글
MySQL SELECT 만 null 값이 아닙니다 (0) | 2020.04.07 |
---|---|
'찾기'를 사용하여 특정 날짜에 작성된 파일을 검색하는 방법은 무엇입니까? (0) | 2020.04.07 |
jQuery는 초점 이벤트를 잃는다 (0) | 2020.04.07 |
Mac OS X의 파일에서 "확장 된 속성"을 제거하려면 어떻게합니까? (0) | 2020.04.07 |
파일 잠금을 확인하는 방법? (0) | 2020.04.07 |