>백엔드 개발 >C++ >네임스페이스를 사용하여 XML 요소를 쿼리할 때 NullPointerException을 방지하는 방법은 무엇입니까?

네임스페이스를 사용하여 XML 요소를 쿼리할 때 NullPointerException을 방지하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-05 13:39:381015검색

How to Avoid NullPointerExceptions When Querying XML Elements with Namespaces?

XDocument에서 XML 네임스페이스 처리

네임스페이스가 포함된 XML 문서로 작업할 때 쿼리 요소가 null 값을 반환하는 경우가 발생할 수 있습니다. 이는 XML 네임스페이스가 제대로 처리되지 않을 때 발생할 수 있습니다.

다음 XML 조각을 고려하세요.

<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent">
    <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system">
        <EventID>589828</EventID>
        <Correlation ActivityID="{00000000-0000-0000-0000-000000000000}"><!--Value to be extracted-->
            <VirtualPath>/Service.svc</VirtualPath>
        </Correlation>
    </System>
</E2ETraceEvent>

Correlation 요소를 쿼리하고 해당 ActivityID를 추출하려고 시도하는 다음 코드가 있다고 가정합니다. 속성 값:

XDocument xDoc = XDocument.Parse(xmlString);
XElement xEl1 = xDoc.Element("E2ETraceEvent");
XElement xEl2 = xEl1.Element("System");
XElement xEl3 = xEl2.Element("Correlation");  // NullPointerException can occur here
XAttribute xAtt1 = xEl3.Attribute("ActivityID");
String sValue = xAtt1.Value;

네임스페이스를 처리하지 않고 이 코드를 실행하면 xEl3에 대한 null 참조가 반환됩니다. Element() 메소드는 네임스페이스를 고려하지 않고 이름과 일치하는 요소를 찾습니다. 이 문제를 해결하려면 네임스페이스를 쿼리에 통합해야 합니다.

XNamespace nsSys = "http://schemas.microsoft.com/2004/06/windows/eventlog/system";
XElement xEl2 = xDoc.Element(nsSys + "System");
XElement xEl3 = xEl2.Element(nsSys + "Correlation");
XAttribute xAtt1 = xEl3.Attribute("ActivityID");
String sValue = xAtt1.Value;

XNamespace 클래스를 사용하여 네임스페이스를 표시하면 Element() 메서드가 네임스페이스 내의 요소를 올바르게 식별할 수 있습니다. 이 예에서 nsSys는 System 요소의 네임스페이스를 나타냅니다.

요약하자면, 네임스페이스가 포함된 XML 문서를 처리할 때 요소를 쿼리하는 동안 null 참조를 방지하려면 네임스페이스를 올바르게 처리하는 것이 중요합니다. XNamespace 클래스를 사용하고 이를 Element() 메서드에 통합하면 요소와 해당 속성에 정확하게 액세스할 수 있습니다.

위 내용은 네임스페이스를 사용하여 XML 요소를 쿼리할 때 NullPointerException을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.