XmlNode InnerXml vs OuterXml

I came across a strange situation, and I hope that someone who understands this better than me can help me solve this problem.

I am inserting an image into an Xml document so that it can be opened using Microsoft Word. As part of this, I need to add an Relationship Xml that maps to the element containing the image. Enough straight.

I add a node that should look like this:

<Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.png"  />

However, the same line appears in the final .doc file:

<Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.png" xmlns="" />

i.e. now it has an empty attribute xmlns = "".

This is enough for Word to believe that the document is damaged and refuses to open. If I manually open the file and delete this attribute, the file will open.

It is clear that I want to remove it programmatically :-) So, I found the parent node. Here, my understanding is a little foggy. I believed that the OuterXml element contains a node and the contents of all its children, while InnerXml just contains children.

Here's what I see (note that escape characters are because I cut from text view in Visual Studio).

OuterXml:

"<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">
<Relationship Id=\"rId3\"     Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings\" Target=\"webSettings.xml\" />
 <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings\" Target=\"settings.xml\" />
<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\" />
<Relationship Id=\"rId5\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\" />
<Relationship Id=\"rId4\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable\" Target=\"fontTable.xml\" />
<Relationship Id=\"rId6\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"media/image1.png\" xmlns=\"\" />

</Relationships>"

InnerXml:

"<Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings\" Target=\"webSettings.xml\" xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\" />
<Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings\" Target=\"settings.xml\" xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\" />
<Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\" xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\" />
<Relationship Id=\"rId5\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\" xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\" />
<Relationship Id=\"rId4\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable\" Target=\"fontTable.xml\" xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\" />
<Relationship Id=\"rId6\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"media/image1.png\" />"

Note that the 6th and last elements have an erroneous xmlns = "" in OuterXml, but not inside InnerXml. I can easily modify InnerXml, but not OuterXml.

So my last question is: “How do I get rid of this added attribute?”, But I also hope that someone can explain why there is a difference between Xml internal and external (except the container).

+4
1

node ? , , ( , http://schemas.openxmlformats.org/package/2006/relationships "). , " " " " .

"OuterXml" 5 , . 6- node , xmlns = ""

"InnerXml" 5 , . 6- node .

: - 'xmlns = ""', , Relationship http://schemas.openxmlformats.org/package/2006/relationships".

XML-.

<root xmlns="urn:foo:bar" xmlns:ns1="urn:baz">
    <item />
    <ns1:item />
    <item xmlns="" />
</root>
  • "urn: foo: bar"
  • 1- : "urn: foo: bar"
  • 2- : "urn: baz"
  • 3- : ""

" xml" , :

<item xmlns="urn:foo:bar" />
<item xmlns="urn:baz" />
<item xmlns="" />

, , . :

<foo:root xmlns:foo="urn:foo" xmlns:bar="urn:bar">
    <foo:element />
    <bar:element />
</foo:root>

<root xmlns="urn:foo" xmlns:bar="urn:bar">
    <element />
    <bar:element />
</root>

<root xmlns="urn:foo">
    <element />
    <element xmlns="urn:bar" />
</root>
+4

Source: https://habr.com/ru/post/1542373/


All Articles