반응형
C#에서 XmlNode에서 속성 값을 읽는 방법은?
XmlNode가 있고 "Name"이라는 속성의 값을 얻고 싶다고 가정합니다.내가 어떻게 그럴 수 있을까?
XmlTextReader reader = new XmlTextReader(path);
XmlDocument doc = new XmlDocument();
XmlNode node = doc.ReadNode(reader);
foreach (XmlNode chldNode in node.ChildNodes)
{
**//Read the attribute Name**
if (chldNode.Name == Employee)
{
if (chldNode.HasChildNodes)
{
foreach (XmlNode item in node.ChildNodes)
{
}
}
}
}
XML 문서:
<Root>
<Employee Name ="TestName">
<Childs/>
</Root>
시도해 보기:
string employeeName = chldNode.Attributes["Name"].Value;
편집: 댓글에서 지적한 것처럼 속성이 존재하지 않으면 예외가 발생합니다.안전한 방법은 다음과 같습니다.
var attribute = node.Attributes["Name"];
if (attribute != null){
string employeeName = attribute.Value;
// Process the value here
}
Konamiman의 솔루션(모든 관련 null check 포함)을 확장하기 위해 제가 해온 일은 다음과 같습니다.
if (node.Attributes != null)
{
var nameAttribute = node.Attributes["Name"];
if (nameAttribute != null)
return nameAttribute.Value;
throw new InvalidOperationException("Node 'Name' not found.");
}
노드를 사용하는 것처럼 모든 속성을 순환할 수 있습니다.
foreach (XmlNode item in node.ChildNodes)
{
// node stuff...
foreach (XmlAttribute att in item.Attributes)
{
// attribute stuff
}
}
사용하는 경우chldNode
~하듯이XmlElement
대신에XmlNode
, 사용가능
var attributeValue = chldNode.GetAttribute("Name");
속성 이름이 없는 경우 반환 값은 빈 문자열일 뿐입니다.
당신의 루프는 이렇게 보일 수 있습니다.
XmlDocument document = new XmlDocument();
var nodes = document.SelectNodes("//Node/N0de/node");
foreach (XmlElement node in nodes)
{
var attributeValue = node.GetAttribute("Name");
}
이렇게 하면 모든 노드가 선택됩니다.<node>
에 둘러싸인<Node><N0de></N0de><Node>
태그를 실행한 후 루프를 거쳐 "이름" 속성을 읽습니다.
이름만 있으면 xpath를 사용합니다.반복 작업을 직접 수행하고 null을 확인할 필요가 없습니다.
string xml = @"
<root>
<Employee name=""an"" />
<Employee name=""nobyd"" />
<Employee/>
</root>
";
var doc = new XmlDocument();
//doc.Load(path);
doc.LoadXml(xml);
var names = doc.SelectNodes("//Employee/@name");
사용하다
item.Attributes["Name"].Value;
가치를 얻기 위해서 입니다.
이 기능을 사용할 수도 있습니다.
string employeeName = chldNode.Attributes().ElementAt(0).Name
또 다른 해결책:
string s = "??"; // or whatever
if (chldNode.Attributes.Cast<XmlAttribute>()
.Select(x => x.Value)
.Contains(attributeName))
s = xe.Attributes[attributeName].Value;
또한 예상되는 속성의 경우에는 예외가 발생하지 않습니다.attributeName
실제로는 존재하지 않습니다.
언급URL : https://stackoverflow.com/questions/1600065/how-to-read-attribute-value-from-xmlnode-in-c
반응형
'source' 카테고리의 다른 글
VBA를 사용하여 아래 셀이 비어 있는지 확인 (0) | 2023.09.21 |
---|---|
ng-change에 대한 지연을 캡슐화하는 각도 지시 (0) | 2023.09.21 |
Wordpress - URL에서 wp-json 다시 쓰기 또는 숨기기 (0) | 2023.09.16 |
간단한 jQuery 양식 검증 스크립트 (0) | 2023.09.16 |
SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 줄 1에서 '?' 근처에 사용할 올바른 구문을 확인하십시오. (0) | 2023.09.16 |