AAB40 Ответов: 2

Некоторая корневая информация рассматривается как незаконные символы


Я пытаюсь прочитать XML-файл с помощью XmlDocument и использую XPath, чтобы добраться до моих дочерних узлов. Я добавил NamespaceManager и указал на свой parentNode. Цель состоит в том, чтобы найти дочерние узлы с определенными именами и изменить внутренний текст независимо от того, имеет ли childnode атрибут. Кроме того, это должно быть то конкретное слово в childnode, а не часть слова. Как я могу сделать это, пожалуйста?

пример:

<?xml version="1.0"?>
<AnXMLTestFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="un:unece:260:data:EEM:02-02-AnXMLTestFile">
  <HeaderBEDocument>
    <Identification>45071dc8-558d-439a-8f0a-88ae73a74910</Identification>
    <DocumentType listAgencyIdentifier="6">386</DocumentType>
    <Creation>2016-06-14T12:31:58.0+01:00</Creation>
  </HeaderBEDocumtent>
  <PayloadBEInvoiceEvent>
    <Identification>45071dc8-558d-439a-8f0a-88ae73a74910</Identification>
    <Function listAgencyIdentifier="6">9</Function>
    <CalculationDateOccurrence>2016-06-14T12:31:58.0+01:00</CalculationDateOccurrence>
    <ConsumptionMonthOccurrence>--04</ConsumptionMonthOccurrence>
    <ConsumptionYearOccurrence>2016</ConsumptionYearOccurrence>
    <SDPUsedServiceDeliveryPointLocation>
      <HeadpointIdentificationDomainLocation>
        <Identification schemeAgencyIdentifier="9">941449900000000028</Identification>
      </HeadpointIdentificationDomainLocation>
      <SCI schemeAgencyIdentifier="86">SC_COMMINJ</SCI>
    </SDPUsedServiceDeliveryPointLocation>
  </PayloadBEInvoiceEvent>


"Идентификация", выделенная жирным шрифтом, должна изменить внутренний текст.

При отладке я получаю ошибку "незаконные символы были найдены". Если я опущу первую часть моего корневого узла, то сообщение об ошибке больше не будет отображаться, и внутренний текст изменится так, как должен. Как я могу это исправить, пожалуйста?

Что я уже пробовал:

символы, оставленные вне корня:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"


Заполнение внутреннего текста при отладке. Но мне нужны эти URL-адреса! Они есть во всех 150 Xml-файлах, которые я хочу изменить.

Richard MacCutchan

Что такое точное сообщение об ошибке и к какой строке оно относится?

2 Ответов

Рейтинг:
11

AAB40

Решено: Foreach-loop содержит различные узлы, из которых мне нужно изменить внутренний текст. В каждом " var XXXNode = node.SelectSingleNode("x:XXX", nsmgr); "Вам нужно добавить" / / " перед "x". Подобный этому

// Select Identification node from all nodes
                var identificationNode = node.SelectSingleNode("//x:Identification", nsmgr); //<==
                if (identificationNode != null)
                {
                    // Change value of indentification node to string
                    identificationNode.InnerText = "string";
                }
// Select SCI node from all parentnodes
                var SCI = node.SelectSingleNode("//x:SCI", nsmgr);//<==
                if (SCI != null)
                {
                    // change value of SCI node to string
                    SCI.InnerText = "56987465";
                }
                // Select ReferenceType node from all nodes
                var ReferenceType = node.SelectSingleNode("//x:ReferenceType", nsmgr);//<==
                if (ReferenceType != null)
                {
                    // change value of ReferenceType node to string
                    ReferenceType.InnerText = "AA";
                }
                // Select CCType node from all nodes
                var CCType = node.SelectSingleNode("//x:CCType", nsmgr);//<==
                if (CCType != null)
                {
                    // change value of CCType node to string
                    CCType.InnerText = "string";
                }

Также используйте "корень.OuterXml", чтобы показать изменения в объекте VS. Здесь:
richTextBox1.Text = root.OuterXml;


Рейтинг:
0

RickZeeland

Вы можете использовать XmlTextReader чтобы добраться до всех элементов последовательно.
Подробная информация: Класс xmltextreader.Метод Чтения (System.Xml)[^]
XmlTextReader - руководство для начинающих[^]