XML 네임 스페이스를 루트 요소로 끌어 올리는 방법

벤 만

다음과 같은 네임 스페이스가있는 XML 파일이있는 경우

<root>

<h:table xmlns:h="http://www.namespaces.com/namespaceOne">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

<h:table xmlns:h="https://www.namespaces.com/namespaceTwo">
  <h:name>African Coffee Table</h:name>
  <h:width>80</h:width>
  <h:length>120</h:length>
</h:table>

</root>

다음과 같이 모든 네임 스페이스를 루트 요소로 끌어 올리고 싶습니다.

<root xmlns:h="http://www.namespaces.com/namespaceOne" xmlns:h1="https://www.namespaces.com/namespaceTwo">

<h:table>
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

<h1:table>
  <h1:name>African Coffee Table</h1:name>
  <h1:width>80</h1:width>
  <h1:length>120</h1:length>
</h1:table>

</root>

이를 수행하는 방법이 있습니까? 위의 예에서와 같이 충돌하는 네임 스페이스 접두사를 자동으로 해결하는 것이 이상적입니다. 나는 사용하기 위해 최선을 다하고하지 않은 XML Linq에를 하거나 에서 System.Xml 가능성이 될 것입니다 그러니, 아직.

한 가지 주요 제약 사항이 있습니다. 작업중인 환경 때문에 클래스를 작성할 수 없습니다. 함수를 작성할 수 있지만 새로운 클래스 정의는 없습니다.

canton7

이것은 매우 간단합니다.

var doc = XDocument.Parse(xml);
var namespaceAttributes = doc.Descendants()
    .SelectMany(x => x.Attributes())
    .Where(x => x.IsNamespaceDeclaration);
int count = 1;
foreach (var namespaceAttribute in namespaceAttributes)
{
    doc.Root.Add(new XAttribute(XNamespace.Xmlns + $"h{count}", namespaceAttribute.Value));
    namespaceAttribute.Remove();
    count++;
}

모든 네임 스페이스 선언 ( xmlns:foo="foo")을 반복합니다 . 우리가 찾은 각각에 대해 동일한 URL을 가진 네임 스페이스 속성을 루트 요소에 넣고 제거합니다.

데모 .

동일한 URL을 가진 여러 네임 스페이스가있는 경우 (예 xmlns:h="https://www.namespaces.com/namespaceOne": 서로 다른 자식에 대해 두 개의 로트가있는 경우) 약간 이상한 일을 수행합니다. 동일한 URL을 가진 xmlns루트 요소에 여러 선언을 넣지 만 모든 요소는 마지막 네임 스페이스를 사용합니다. . 이를 방지하려면 루트 요소에 추가 한 네임 스페이스 목록을 유지하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

네임 스페이스없이 XML 요소에 액세스하는 방법

분류에서Dev

루트 요소의 dataweave xml 네임 스페이스 선언

분류에서Dev

접두사 (groovy)로 xml 파일의 네임 스페이스를 얻는 방법

분류에서Dev

네임 스페이스가있는 xpath 쿼리 루트 요소

분류에서Dev

네임 스페이스 정보를 포함하여 XML 요소를 만드는 방법은 무엇입니까?

분류에서Dev

라우트에 네임 스페이스와 루트 경로를 모두 포함하는 방법-Rails 4

분류에서Dev

공유 네트워크 네임 스페이스에서 일부 리소스를 잠그는 방법

분류에서Dev

WiX는 루트 요소에서 네임 스페이스를 제거합니다.

분류에서Dev

Groovy에서 XmlSlurper와 함께 XML 네임 스페이스 사용-경로를 올바르게 쿼리하는 방법은 무엇입니까?

분류에서Dev

Groovy에서 XmlSlurper와 함께 XML 네임 스페이스 사용-경로를 올바르게 쿼리하는 방법은 무엇입니까?

분류에서Dev

XML-루트에없는 네임 스페이스 추가

분류에서Dev

veth 피어 ifindex의 네트워크 네임 스페이스를 찾는 방법은 무엇입니까?

분류에서Dev

veth 피어 ifindex의 네트워크 네임 스페이스를 찾는 방법은 무엇입니까?

분류에서Dev

어셈블리별로 프로젝트의 모든 네임 스페이스를 가져 오는 방법은 무엇입니까?

분류에서Dev

Vue, vuex : 네임 스페이스가있는 상점과 조롱으로 구성 요소를 단위 테스트하는 방법은 무엇입니까?

분류에서Dev

XML에서 네임 스페이스가 지정된 루트 노드의 요점은 무엇이며 이러한 네임 스페이스는 어디에 정의됩니까?

분류에서Dev

기본 네임 스페이스를 제거하고 C #을 사용하여 xml의 루트 태그에 사용자 지정 네임 스페이스를 추가하는 방법은 무엇입니까?

분류에서Dev

네임 스페이스에있는 XML의 요소 액세스

분류에서Dev

글로벌 네임 스페이스를 참조하는 방법

분류에서Dev

xml.etree.ElementTree.parse가 네임 스페이스 요소를 소문자로 변환하는 이유

분류에서Dev

XSLT는 루트 네임 스페이스를 제거하고 다른 요소에 네임 스페이스를 추가합니다.

분류에서Dev

XPath를 사용하여 조건에 따라 기본 네임 스페이스를 포함하는 XML의 특정 요소를 가져 오는 방법

분류에서Dev

네임 스페이스가있는 XML 요소를 읽지 않음

분류에서Dev

XML에서 네임 스페이스가없는 요소

분류에서Dev

네임 스페이스가있는 XML 노드를 선택하는 방법

분류에서Dev

Mulesoft Dataweave에서 XML 네임 스페이스를 제거하는 방법

분류에서Dev

파이썬을 사용하여 기본 네임 스페이스가있는 xml 파일의 모든 요소의 xpath를 얻는 방법은 무엇입니까?

분류에서Dev

JAVA에서 단일 XML 요소에 대한 접두사를 사용하여 기본 네임 스페이스 및 네임 스페이스를 코딩하는 방법

분류에서Dev

JAVA에서 단일 XML 요소에 대한 접두사를 사용하여 기본 네임 스페이스 및 네임 스페이스를 코딩하는 방법

Related 관련 기사

  1. 1

    네임 스페이스없이 XML 요소에 액세스하는 방법

  2. 2

    루트 요소의 dataweave xml 네임 스페이스 선언

  3. 3

    접두사 (groovy)로 xml 파일의 네임 스페이스를 얻는 방법

  4. 4

    네임 스페이스가있는 xpath 쿼리 루트 요소

  5. 5

    네임 스페이스 정보를 포함하여 XML 요소를 만드는 방법은 무엇입니까?

  6. 6

    라우트에 네임 스페이스와 루트 경로를 모두 포함하는 방법-Rails 4

  7. 7

    공유 네트워크 네임 스페이스에서 일부 리소스를 잠그는 방법

  8. 8

    WiX는 루트 요소에서 네임 스페이스를 제거합니다.

  9. 9

    Groovy에서 XmlSlurper와 함께 XML 네임 스페이스 사용-경로를 올바르게 쿼리하는 방법은 무엇입니까?

  10. 10

    Groovy에서 XmlSlurper와 함께 XML 네임 스페이스 사용-경로를 올바르게 쿼리하는 방법은 무엇입니까?

  11. 11

    XML-루트에없는 네임 스페이스 추가

  12. 12

    veth 피어 ifindex의 네트워크 네임 스페이스를 찾는 방법은 무엇입니까?

  13. 13

    veth 피어 ifindex의 네트워크 네임 스페이스를 찾는 방법은 무엇입니까?

  14. 14

    어셈블리별로 프로젝트의 모든 네임 스페이스를 가져 오는 방법은 무엇입니까?

  15. 15

    Vue, vuex : 네임 스페이스가있는 상점과 조롱으로 구성 요소를 단위 테스트하는 방법은 무엇입니까?

  16. 16

    XML에서 네임 스페이스가 지정된 루트 노드의 요점은 무엇이며 이러한 네임 스페이스는 어디에 정의됩니까?

  17. 17

    기본 네임 스페이스를 제거하고 C #을 사용하여 xml의 루트 태그에 사용자 지정 네임 스페이스를 추가하는 방법은 무엇입니까?

  18. 18

    네임 스페이스에있는 XML의 요소 액세스

  19. 19

    글로벌 네임 스페이스를 참조하는 방법

  20. 20

    xml.etree.ElementTree.parse가 네임 스페이스 요소를 소문자로 변환하는 이유

  21. 21

    XSLT는 루트 네임 스페이스를 제거하고 다른 요소에 네임 스페이스를 추가합니다.

  22. 22

    XPath를 사용하여 조건에 따라 기본 네임 스페이스를 포함하는 XML의 특정 요소를 가져 오는 방법

  23. 23

    네임 스페이스가있는 XML 요소를 읽지 않음

  24. 24

    XML에서 네임 스페이스가없는 요소

  25. 25

    네임 스페이스가있는 XML 노드를 선택하는 방법

  26. 26

    Mulesoft Dataweave에서 XML 네임 스페이스를 제거하는 방법

  27. 27

    파이썬을 사용하여 기본 네임 스페이스가있는 xml 파일의 모든 요소의 xpath를 얻는 방법은 무엇입니까?

  28. 28

    JAVA에서 단일 XML 요소에 대한 접두사를 사용하여 기본 네임 스페이스 및 네임 스페이스를 코딩하는 방법

  29. 29

    JAVA에서 단일 XML 요소에 대한 접두사를 사용하여 기본 네임 스페이스 및 네임 스페이스를 코딩하는 방법

뜨겁다태그

보관