Я новичок в Xml, пытаюсь создать простую базу данных, в которую я могу читать и писать из соответствующего консольного приложения C #.
У меня загружен файл Xml, затем сгенерирован список C # элементов Xml 'string_ID' (который, как предполагалось, был идентификатором в каждом узле, покажет код ** ПРИМЕЧАНИЕ: не фактическая функция Xml ID). Если пользовательский ввод совпадает с string_ID в Списке (я предполагаю, что могу вырезать эту часть, но это в основном суть моей проблемы), тогда программа выбирает соответствующий элемент Xml и увеличивает счетный узел (?).
Я не могу выбрать один узел, основываясь на пользовательском вводе для работы. Ну, я не могу заставить работать выбор одного узла на основе "string_ID" - как при жестком кодировании моих тестовых значений.
Некоторые из моих предыдущих попыток найдены в сети:
1)
XmlElement root = xDoc.DocumentElement;
var result = root.GetElementsByTagName("prizeUnit")
.Where(i => (string)i.Element("string_ID") == "333AI")
.Seelect(i => (string)i.Element("Folder"));
- Мой самый последний; .Где и т.д. даже не регистрируются.
2)
XmlNode node = xDoc.DocumentElement.SelectSingleNode(
'//prizeUnit/string_ID[text()="333AI"]');
- Обратите внимание на одинарные и двойные кавычки.
* 1 022 * 3)
XmlNode node = xDoc.DocumentElement.SelectSingleNode(
"root_prizes/prizeUnit/string_ID[" + input + "]");
4)
XmlNode node = xDoc.DocumentElement.SelectSingleNode(
"root_prizes/prizeUnit/[string_ID/text() = \"input\"]");
- Это было то, что предшествовало делу № 2. \ "\" Показалось мне примечательным.
Мой XML-файл:
<root_prizes xmlns="http://tempuri.org/XMLSchema.xsd">
<prizeUnit>
<string_ID>333AI</string_ID>
<prizeName>cashGrandPrize01</prizeName>
<count>1313</count>
</prizeUnit>
<prizeUnit>
<string_ID>334BI</string_ID>
<prizeName>cashGrandPrize02</prizeName>
<count>2424</count>
</prizeUnit>
<prizeUnit>
<string_ID>335CI</string_ID>
<prizeName>cashGrandPrize03</prizeName>
<count>0</count>
</prizeUnit>
</root_prizes>
Моя схема для вышеуказанного файла (я просто прыгнул на схемы, поэтому извиняюсь, если внутри есть явные проблемы):
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
elementFormDefault="qualified"
xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:element name="root_prizes">
<xs:complexType>
<xs:sequence>
<!--https://stackoverflow.com/questions/25409242/creating-an-xml-document-with-more-than-1-child-element-with-xml-schema-->
<xs:element name="prizeUnit" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="string_ID" type="xs:string" />
<xs:element name="prizeName" type="xs:string" />
<xs:element name="count" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
пользовательский ввод - это строка, которая должна соответствовать «string_ID», то есть «335AI».
В случае № 3 я сталкиваюсь с ошибкой:
Необработанное исключение: System.Xml.XPath.XPathException: выражение должно вычисляться как набор узлов.
Спасибо за любую помощь.