XElement 또는 LINQ와 함께 XPath를 사용하는 방법은 무엇입니까?
다음과 같은 XML을 생각해 보십시오.
<response>
<status_code>200</status_code>
<status_txt>OK</status_txt>
<data>
<url>http://bit.ly/b47LVi</url>
<hash>b47LVi</hash>
<global_hash>9EJa3m</global_hash>
<long_url>http://www.tumblr.com/docs/en/api#api_write</long_url>
<new_hash>0</new_hash>
</data>
</response>
를 을 을 는 를 <hash>
노력했습니다.
var hash = xml.Element("hash").Value;
하지만 그건 안 돼요.XPath를에수까할?에할 수 ?XElement
할 수 요? 형이랑 할 수 있어요.System.Xml
프레임워크, 다음과 같은 작업을 수행합니다.
xml.Node("/response/data/hash").Value
LINQ 네임스페이스에 이런 것이 있습니까?
업데이트:
이것을 좀 더 가지고 돌아다닌 후에 저는 제가 하려는 일을 할 수 있는 방법을 찾았습니다.
var hash = xml.Descendants("hash").FirstOrDefault().Value;
더 나은 해결책이 있는 사람이 있는지 알고 싶습니다.
하려면 XML에 대한 합니다(LINQ 를 XPath 하려면 합니다 을 에 합니다 을 ).System.Xml.XPath
, 의 확장 방법이 적용됩니다.
예에서:
var value = (string)xml.XPathEvaluate("/response/data/hash");
다른 사람들은 "네이티브" LINQ to XML 쿼리를 사용하여 원하는 작업을 수행하는 방법을 전적으로 합리적으로 제안했습니다.
그러나, 많은 대안을 제공하기 위하여, 고려하고, XPath 식을 평가하기 위하여,XNode
입니다.)XNode
를 사용하여 를 작성할 수도 있습니다.XPathNavigator
당분간은XNode
.
개인적으로 저는 직접 LINQ to XML API를 사용하는 것을 매우 좋아합니다. 왜냐하면 저는 LINQ의 열렬한 팬이기 때문입니다. 하지만 XPath가 더 편하다면 위의 내용이 도움이 될 것입니다.
LINQ to XML을 처리할 때 실제 개체를 얻기 위해 LINQ를 사용하는 것이 어떻습니까?
자손은 전체 XML에서 각 요소를 찾고 지정한 이름과 일치하는 모든 개체를 나열합니다.그래서 당신의 경우 해시는 그것이 찾는 이름입니다.
그래서 하기 보다는
var hash = xml.Descendants("hash").FirstOrDefault().Value;
나는 다음과 같이 헤어질 것입니다.
var elements = xml.Descendants("hash");
var hash = elements.FirstOrDefault();
if(hash != null)
hash.Value // as hash can be null when default.
이렇게 하면 속성, 노드 요소 등도 얻을 수 있습니다.
도움이 되도록 이 기사를 확인하여 명확한 아이디어를 얻으십시오.http://www.codeproject.com/KB/linq/LINQtoXML.aspx 이것이 당신에게 도움이 되기를 바랍니다.
사용하시면 됩니다.XPath-유사 구조를 형성하도록 요소들을 사슬로 묶는 요소() 방법
예를 들어 다음과 같습니다.
XElement xml = XElement.Parse(@"...your xml...");
XElement hash = xml.Element("data").Element("hash");
저는 xpath 생성을 위한 LINQesq 프레임워크를 마련하려고 노력했습니다.c# 람다 식을 사용하여 xpath를 설명할 수 있습니다.
var xpath = CreateXpath.Where(e => e.TargetElementName == "td" && e.Parent.Name == "tr");
var xpath = CreateXpath.Where(e => e.TargetElementName == "td").Select(e => e.Text);
이런 맥락에서 도움이 될지는 모르겠지만, 여기에서 설명서를 찾을 수 있습니다.
http://www.syntaxsuccess.com/viewarticle/how-to-create-xpath-using-linq
대답은 Yes & No 입니다.그것은 가능하지만 함께는 안됩니다.XElement
~하듯이Xelement
문서 전체를 나타내는 것이 아니라 단지 일부를 나타내는 것입니다.XDocument
xml 문서 전체를 나타내는 것은 다음과 같은 함수를 갖습니다.XPathSelectElement()
바로 이 점을 위하여
그래서 Xml 같은 경우에는
<response>
<status_code>200</status_code>
<status_txt>OK</status_txt>
<data>
<url>http://someurl/b47LVi</url>
<hash>b47LVi</hash>
<global_hash>9EJa3m</global_hash>
<long_url>http://www.tumblr.com/docs/en/api#api_write</long_url>
<new_hash>0</new_hash>
</data>
</response>
먼저 다음과 같이 읽으셔야 합니다.XDocument
와 함께
XDocument.Parse("xmlcontent..");
//convert from Xelement
var xe = XElement.Parse("xml string data...");
var xd = new XDocument(xe);
그럼 전화해 보세요.XDocument.XPathSelectElement("/response/data/hash")
아래 예제와 같은 결과를 얻으려면 다음을 수행합니다.
void Main()
{
var xm = @"<response>
<status_code>200</status_code>
<status_txt>OK</status_txt>
<data>
<url>http://someurl/b47LVi</url>
<hash>b47LVi</hash>
<global_hash>9EJa3m</global_hash>
<long_url>http://www.tumblr.com/docs/en/api#api_write</long_url>
<new_hash>0</new_hash>
</data>
</response>";
var xd = XDocument.Parse(xm);
xd.XPathSelectElement("/response/data/hash").Dump("element");
xd.XPathSelectElement("/response/data/hash").Value.Dump("value");
}
참고:Dump()
하는 방법입니다.Console.WriteLine()
마지막으로 교체해주시기 바랍니다.
결과는 다음과 같습니다.
언급URL : https://stackoverflow.com/questions/3642829/how-to-use-xpath-with-xelement-or-linq
'programing' 카테고리의 다른 글
UI뷰 쉐이크 애니메이션 (0) | 2023.09.10 |
---|---|
안드로이드란 무엇입니까?R.layout.simple_list_item_1"? (0) | 2023.09.10 |
MariaDB와 트리거는 트리거된 테이블에서 작동합니다. (0) | 2023.09.10 |
이 빌드에는 사용되지 않는 Gradle 기능이 사용되어 Gradle 5.0과 호환되지 않습니다. (0) | 2023.09.10 |
Mysql 지정한 날짜에 시간 전에 선택 (0) | 2023.09.10 |