[xml] XPath를 사용하여 속성 얻기

XML 구조는 다음과 같습니다.

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

어떻게 값 얻을 수 lang( langeng첫 번째 요소에 대한 책 제목을)?



답변

첫 번째 요소에 대해 lang (책 제목의 lang = eng) 값을 얻으려면 어떻게해야합니까?

사용 :

/*/book[1]/title/@lang

이것은 다음을 의미합니다 .

XML 문서 맨 위 요소의 lang첫 번째 book자식의 title 요소 의 속성을 선택하십시오 .

이 속성의 문자열 값만 얻으려면 표준 XPath 함수를 사용하십시오string() .

string(/*/book[1]/title/@lang)


답변

감사! 이것은 Div 내부의 데이터 속성과 비슷한 문제를 해결했습니다.

<div id="prop_sample" data-want="data I want">data I do not want</div>

이 xpath를 사용하십시오. //*[@id="prop_sample"]/@data-want

이것이 다른 누군가를 돕기를 바랍니다!


답변

아래의 xPath 패턴을 사용해보십시오.

  XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']")


답변

당신은 또한 그것을 얻을 수 있습니다

string(//bookstore/book[1]/title/@lang)
string(//bookstore/book[2]/title/@lang)

JavaScript와 함께 XMLDOM을 사용하는 경우 다음과 같은 코드를 작성할 수 있습니다.

var n1 = uXmlDoc.selectSingleNode("//bookstore/book[1]/title/@lang");

그리고 n1.text당신에게 가치를 줄 것입니다"eng"


답변

당신이 사용할 수있는:

(//@lang)[1]

즉, 이름이 “lang”인 모든 속성 노드를 가져 와서 첫 번째 노드를 가져옵니다.


답변

다음은 XPath 및 VTD-XML을 사용하여 “lang”의 속성 값을 가져 오는 스 니펫입니다.

import com.ximpleware.*;
public class getAttrVal {
    public static void main(String s[]) throws VTDException{
        VTDGen vg = new VTDGen();
        if (!vg.parseFile("input.xml", false)){
            return ;
        }
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/bookstore/book/title/@lang");
        System.out.println(" lang's value is ===>"+ap.evalXPathToString());
    }
}


답변

PostgreSQL을 사용하는 경우 이것이 올바른 방법입니다. 이는 채워진 데이터 가있는 장부 테이블 TITLEPRICE 열 이있는 것으로 가정 한 것 입니다. 여기 쿼리가 있습니다

SELECT xpath('/bookstore/book/title/@lang', xmlforest(book.title AS title, book.price AS price), ARRAY[ARRAY[]::TEXT[]]) FROM book LIMIT 1;