Member 11403304 Ответов: 2

Как найти правильный узел среди многих узлов, который соответствует значению переменной value (strcourtncic)? )


Я действительно застрял на этом, хотя кажется, что то, что я хочу, очень просто.
У меня есть объект ObjXmlSimpleTypeDoc, который имеет два узла EnumerationValue. Каждый из EnumerationValue имеет дочерние узлы.

Я хочу найти правильное значение перечисления. Чтобы найти правильный узел EnumerationValue, я использую переменную strCourtNCIC. Если значение в strCourtNCIC (в данном случае MN010015J. Это значение может быть каким-то другим значением) соответствует EnumerationValue@code, то есть нужному мне узлу EnumerationValue.
Для этого вопроса strCourtNCIC имеет значение MN010015J.

Как мне это сделать в VB.NET-что? Мой VB.NET код ничего не возвращает для objXmlEnumerationValueNode, хотя я ожидаю увидеть узел с @code = MN010015J

Вот объект objXmlSimpleTypeDoc, где мне нужно найти EnumerationValue с @code = strCourtNCIC (MN010015J)
<SimpleTypeCompanion enumerates="CourtLocationTextType">
	<EnumerationValue code="MN010015J">
		<Text>Emily County</Text>
		<AssociatedValue type="MNCISNodeID">
			<Text>111</Text>
		</AssociatedValue>
		<AssociatedValue type="CountyName">
			<Text>Emily</Text>
		</AssociatedValue>
		<AssociatedValue type="PhoneNumber">
			<Text>724-820-7123</Text>
		</AssociatedValue>
	</EnumerationValue>
	<EnumerationValue code="DC19DAKDC">
		<Text>Pope County</Text>
		<AssociatedValue type="MNCISNodeID">
			<Text>112</Text>
		</AssociatedValue>
		<AssociatedValue type="CountyName">
			<Text>Pope</Text>
		</AssociatedValue>
	</EnumerationValue>
</SimpleTypeCompanion>


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

Вот это самое VB.NET код, с которым мне нужна помощь, чтобы просто получить правильное значение EnumerationValue, соответствующее strCourtNCIC (MN010015J).

'CourtNCIC 
strCourtNCIC = objXmlMNCISData.DocumentElement.SelectSingleNode("Case/Court/CourtNCIC").InnerText
'Access the CourtLocationTextType simple type. 
objXmlSimpleTypeDoc = Msc.Integration.CourtXml.Library.v4.SimpleType.GetCompanionFile("CourtLocationTextType")

'Get the correct EnumerationValue node that has @code =MN010015J string value
objXmlEnumerationValueNode = objXmlSimpleTypeDoc.SelectSingleNode("/SimpleTypeCompanion/EnumerationValue[@code=" + strCourtORI + "]/@code")

2 Ответов

Рейтинг:
18

Richard Deeming

Вы не показали нам, где вы инициализируете strCourtORI переменная. Но, глядя на ваши данные, наиболее вероятная проблема заключается в том, что вы пропускаете кавычки вокруг значения:

objXmlEnumerationValueNode = objXmlSimpleTypeDoc.SelectSingleNode("/SimpleTypeCompanion/EnumerationValue[@code='" + strCourtORI + "']")
Также обратите внимание, что вы пытались выбрать сам атрибут, а не EnumerationValue узел.


Member 11403304

Привет, Ричард, ты решил мою проблему. Да, мне не хватало одиночных кавычек вокруг значения. Ты прекратил всю боль, которую я испытывал в последние дни. Что - то такое простое, но такое трудное для понимания!

Maciej Los

5ed!

Рейтинг:
0

Maciej Los

Другой способ заключается в использовании Класс XDocument[^]:

Dim xcontent As String = "<SimpleTypeCompanion enumerates='CourtLocationTextType'>
	<EnumerationValue code='MN010015J'>
		<Text>Emily County</Text>
		<AssociatedValue type='MNCISNodeID'>
			<Text>111</Text>
		</AssociatedValue>
		<AssociatedValue type='CountyName'>
			<Text>Emily</Text>
		</AssociatedValue>
		<AssociatedValue type='PhoneNumber'>
			<Text>724-820-7123</Text>
		</AssociatedValue>
	</EnumerationValue>
	<EnumerationValue code='DC19DAKDC'>
		<Text>Pope County</Text>
		<AssociatedValue type='MNCISNodeID'>
			<Text>112</Text>
		</AssociatedValue>
		<AssociatedValue type='CountyName'>
			<Text>Pope</Text>
		</AssociatedValue>
	</EnumerationValue>
</SimpleTypeCompanion>"

Dim strCourtORI As String = "MN010015J"

Dim xdoc As XDocument = XDocument.Parse(xcontent)
Dim result = xdoc.Descendants() _
	.Where(Function(x) x.Name="EnumerationValue" AndAlso x.Attribute("code").Value = strCourtORI) _
	.FirstOrDefault()
'done! 


Richard Deeming

К твоему сведению, это может потерпеть неудачу с помощью NullReferenceException если бы там был Ан EnumerationValue элемент без а code атрибут.

Явные операторы приведения, которые приводят к ссылочному типу или типу значения nullable, не будут завершаться ошибкой, если элемент или атрибут равен null, поэтому было бы безопаснее использовать его.

.Where(Function(x) x.Name = "EnumerationValue" AndAlso CStr(x.Attribute("code")) = strCourtORI) _

Maciej Los

Хорошая мысль, Ричард. Спасибо.