Я пытаюсь выяснить общее количество элементов определенного имени, которые существуют в документе Xml, используя VB. Должна быть достаточно простая задача, но я столкнулся с проблемой.передать элементы xdocument (not element) как строку
Я могу сделать следующий код работы, но не могу передать имя элемента в виде строки (в исходном коде я делаю это из массива, который я хочу пропустить), я не получаю ошибку в визуальной студии, во время компиляции или во время выполнения, она просто возвращает нулевое количество. Я вырезал исходный код, чтобы показать только раздел, с которым я столкнулся.
Следующий код работает.
Dim xmlDoc = XDocument.Load("c:\test\xmlFile.xml")
myXMLRowCount = xmlDoc.Root.Elements.<AIOWEB_tPriceBand>.Count()
MsgBox(myXMLRowCount)
Единственный пример, который я могу найти для передачи переменной в качестве элемента, удалив. <> и заменяя на (myVariable) - как показано ниже, но пример, который я видел это для Element not Elements, и, похоже, не работает одинаково (если только мне не хватает указателя/символа в команде состав).
Dim xmlDoc = XDocument.Load("c:\test\xmlFile.xml")
Dim myXmlElement As String = "AIOWEB_tPriceBand"
myXMLRowCount = xmlDoc.Root.Elements(myXmlElement).Count()
MsgBox(myXMLRowCount)
- редактировать *
Вот вырубать пример одного из XML-файлов, о которых идет речь. Я протестировал его здесь с указанными выше строками кода и снова работает прямая ссылка (показывает 5 элементов), но второй пример с переменной возвращает 0 элементов.
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:od="urn:schemas-microsoft-com:officedata">
<xsd:schema>
<xsd:element name="dataroot">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="AIOWEB_tPriceBand" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="generated" type="xsd:dateTime"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="AIOWEB_tPriceBand">
<xsd:annotation>
<xsd:appinfo>
<od:index index-name="ProductCode" index-key="ProductCode " primary="no" unique="no" clustered="no"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ProductCode" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="50"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="MinQty" minOccurs="0" od:jetType="longinteger" od:sqlSType="int" type="xsd:int"/>
<xsd:element name="MaxQty" minOccurs="0" od:jetType="longinteger" od:sqlSType="int" type="xsd:int"/>
<xsd:element name="UnitPrice" minOccurs="0" od:jetType="currency" od:sqlSType="money" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<dataroot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" generated="2014-01-16T12:02:35">
<AIOWEB_tPriceBand>
<ProductCode>0000000000001</ProductCode>
<MinQty>1</MinQty>
<MaxQty>0</MaxQty>
<UnitPrice>0.01</UnitPrice>
</AIOWEB_tPriceBand>
<AIOWEB_tPriceBand>
<ProductCode>0000000000002</ProductCode>
<MinQty>1</MinQty>
<MaxQty>0</MaxQty>
<UnitPrice>0.01</UnitPrice>
</AIOWEB_tPriceBand>
<AIOWEB_tPriceBand>
<ProductCode>0000000000003</ProductCode>
<MinQty>1</MinQty>
<MaxQty>0</MaxQty>
<UnitPrice>0.01</UnitPrice>
</AIOWEB_tPriceBand>
<AIOWEB_tPriceBand>
<ProductCode>0000000000004</ProductCode>
<MinQty>1</MinQty>
<MaxQty>0</MaxQty>
<UnitPrice>0.01</UnitPrice>
</AIOWEB_tPriceBand>
<AIOWEB_tPriceBand>
<ProductCode>0000000000005</ProductCode>
<MinQty>1</MinQty>
<MaxQty>0</MaxQty>
<UnitPrice>0.01</UnitPrice>
</AIOWEB_tPriceBand>
</dataroot>
</root>
Это работает для меня. Можете ли вы опубликовать пример XML-документа, который можно использовать для воспроизведения поведения? –
Привет, Стив, я получу один из небольших документов, вырезал его, возможно, 5 записей и вычеркнул конфиденциальную информацию. Спасибо – user3203148
Привет, Стив, я добавил пример Xml к своему оригинальному сообщению. Спасибо – user3203148