Как изменить значение атрибута, имеющего пространство имен? - PullRequest
0 голосов
/ 04 марта 2019

Ниже приведен формат XML:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1" xml:lang="en">
<head>
<meta name="dtb:uid" content="0000000000000"/>
<meta name="dtb:depth" content="1"/>
<meta name="dtb:totalPageCount" content="pageNumber"/>
<meta name="dtb:maxPageNumber" content="0"/>
</head>
</ncx>

Мне нужно изменить значение xml: lang, но я не знаю, как это сделать.

Мой код C #:

xtabdoc.Root.Descendants().FirstOrDefault(el =>(string)el.Attribute(XNamespace.Xml + "lang") == "en");

Показано ноль.

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Легко:

           XDocument doc = XDocument.Load(FILENAME);
            XElement root = doc.Root;
            XAttribute lang = root.Attributes().Where(x => x.Name.LocalName == "lang").FirstOrDefault();
            lang.SetValue("abc");
0 голосов
/ 04 марта 2019

Вы можете получить Элемент, используя следующее.

var result = XDocument.Parse(xmlString).Descendants().FirstOrDefault(el =>(string)el.Attribute(XNamespace.Xml + "lang") == "en");

Ключ заключается в том, что Элемент лежит в Корне.Поэтому, когда вы используете Root.Descendants, вы не учитываете Node, поэтому вы получили нулевое значение.

...