Namespace Manager ou XsltContext nécessaire. Cette requête a un préfixe, une variable ou une fonction définie par l'utilisateur. dans HTMLAgilityPack

c# html html-agility-pack

Question

J'ai le contenu suivant dans le document 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>

Je dois changer la valeur de l'attribut <dc:date> à la date du jour. J'utilise HtmlAgilityPack et le code ci-dessous

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);

Mais quand j'ai essayé de convertir, Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function. cette erreur Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function. Comment changer sa valeur?

Réponse populaire

Il semble que HtmlAgilityPack ne supporte pas le préfixe contenant XPath .

Si votre document html est bien formé (xml valide), vous pouvez utiliser XDocument ou XmlDocument , les deux supportant l'espace de nom / le préfixe.

Par exemple, pour obtenir l'élément <cd:date> partir de l'exemple XML ci-dessus à l'aide de XDocument :

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");



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi