네임 스페이스 관리자 또는 XsltContext가 필요합니다. 이 쿼리에는 접두사, 변수 또는 사용자 정의 함수가 있습니다. HTMLAgilityPack에서

c# html html-agility-pack

문제

나는 HTML 문서에 다음과 같은 내용이있다.

 <opf:metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
    <dc:title>Book Title</dc:title>
    <dc:language>en-us</dc:language>
    <meta name="cover" content="My_Cover" xmlns="" />
    <dc:identifier id="BookId" opf:scheme="ISBN">123456789</dc:identifier>
    <dc:creator>Author Name</dc:creator>
    <dc:publisher>amazon.com</dc:publisher>
    <dc:subject>amazon.com</dc:subject>
    <dc:date>2014-02-28T00:00:00+05:30</dc:date>
  </opf:metadata>

<dc:date> 속성의 값을 현재 날짜로 변경해야합니다. HtmlAgilityPack 및 아래 코드를 사용하고 있습니다.

var html1 = new HtmlAgilityPack.HtmlDocument();
             html1.LoadHtml(OPFFile);

             var links1 = html1.DocumentNode.SelectNodes("opf:metadata");

             foreach (var link in links1)
             {

                 link.Attributes["dc:date"].Value = DateTime.Now.ToString("yyyy-MM-dd");
             }

             var builder1 = new StringBuilder();
             using (var writer = new StringWriter(builder))
             {
                 html1.Save(writer);
             }
             OPFFile = builder1.ToString();
             File.WriteAllText(@"D:\FindImageInFile\FindImageInFile\OPF.html", OPFFile);

하지만 내가 변환하려고 할 때이 오류 Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function. 그것의 가치를 바꾸는 방법?

인기 답변

HtmlAgilityPack은 접두어를 포함하는 XPath를 지원하지 않는 것 같습니다.

html 문서가 올바른 형식 (유효한 XML) 인 경우 XDocument 또는 XmlDocument를 사용할 수 있으며 둘 다 네임 스페이스 / 접두사를 지원합니다.

예를 들어, XDocument 사용하여 위의 샘플 xml에서 <cd:date> 요소를 얻으려면 :

var xdoc = XDocument.Parse(OPFFile);
//or if OPFFile is file path use : XDocument.Load(OPFFile);
XNamespace dc = "http://purl.org/dc/elements/1.1/";
var date = (string)xdoc.Root.Element(dc + "date");


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.