2012-07-13 115 views
1

我有一个XMLReader类的奇怪问题。我从一个URL原子饲料,XML树的一些元素被命名为这样的:使用C#XmlReader冒号问题(命名空间)

[XmlElement("element:id")] 

<element:title>Hello World!</element:title> 
<element:text>This is just an example</element:text> 
<element:id>1</element:id> 

林,但是这是行不通的,当我看到通过代码我看读者解析这是

element_x003A_id 

,但如果我使用

[XmlElement("element_x003A_id)] 

我什么也没得到。我试着摆弄Xml​​编码,但属性是只读的。我如何逃避这个,所以我可以得到元素的内容(如果元素没有分号它工作得很好)?

+2

请参阅此链接:在XML命名空间(http://msdn.microsoft.com/en- us/magazine/cc302166.aspx) – 2012-07-13 07:11:19

+0

btw,':'是冒号;一个分号是';' – 2012-07-13 07:15:58

+0

谢谢你的信息L.B – Anonymous 2012-07-13 07:16:05

回答

4

element是一个名称空间别名。某处,您(通常位于文件顶部)

<foo ... xmlns:element="http://something/blah/blog"> 

“http:// something/blah/blog”很重要。基本上,你需要:

[XmlElement("id", Namespace="http://something/blah/blog")] 
public int Id {get;set;} 

或者因为它会被反复使用:

const string MyNamespace = "http://something/blah/blog"; 
//... 
[XmlElement("id", Namespace=MyNamespace)] 
public int Id {get;set;} 
+0

谢谢,我很尴尬地错过了这么基本的东西。 – Anonymous 2012-07-13 07:15:39

+0

@匿名只是为了记录,除了读者,别名'element'不重要。一个不同的文件可以完全合法**使用'xmlsn:evil = ...'和'' - 并且数据将** **相同​​*。这就是为什么'[XmlElement(...)]'知道*名称空间*,但不需要知道*别名*的原因。事实上,你甚至不需要别名;它可能是''它仍然是完全相同的数据。 – 2012-07-13 07:19:52

+0

感谢您的澄清,添加命名空间完美的作品。 – Anonymous 2012-07-13 07:53:26