2013-05-04 177 views
2

我有一個XML格式的格式如下忽略空白讀取XML

<Tag> 
    Value 
</Tag> 

這種來自外部數據源,我不能改變。 使用XmlReader時,內容有LinebreaksWhitepace

XmlReaderSettings xmlSettings = new XmlReaderSettings(); 
xmlSettings.Schemas = new System.Xml.Schema.XmlSchemaSet(); 
XmlReader schemaReader = XmlReader.Create(xsdStream); 
xmlSettings.Schemas.Add("", schemaReader); 
xmlSettings.ValidationType = ValidationType.Schema; 
reader = XmlReader.Create(xmlFilename, xmlSettings); 
// Parse the XML file. 
while (reader.Read()) 
{ 
    if (reader.IsStartElement()) 
    { 
     switch (reader.Name) 
     { 
      case "Tag": 
       string value = reader.ReadElementContentAsString(); 
       Console.WriteLine(value); 
       break; 
      } 
    } 
} 

我該如何避免這種情況?

+0

任何理由不使用'value.Trim()'?你真的需要使用'XmlReader'而不是LINQ到XML或類似嗎? (除非你正在閱讀一個巨大的文檔,它很容易將整個事件解析爲一個DOM。) – 2013-05-04 16:25:10

回答

3

不工作答案

這個答案似乎並不工作,但我要離開它的那一刻,以避免其他人提出的建議。如果有人發佈了更好的答案,我會刪除此內容。

你試過設置XmlReaderSettings.IgnoreWhitespace

不被視爲重要的空白包括空格,製表符和用於設置標記以提高可讀性的空白行。元素內容中的空白就是一個例子。

出於某種原因,這影響ReadElementContentAsString甚至文本節點的Value財產。

答案很簡單

你可以只調用Trim

string value = reader.ReadElementContentAsString().Trim(); 

這不會刪除換行符之間contentful線,當然......如果你需要做的是,你總是可以使用string.Replace

(正如我在評論中提到,我個人比較喜歡使用LINQ to XML比XmlReader除非你真正閱讀的東西太大,不適合在內存中,但這是另外一個問題。)

+0

'XmlReaderSettings.IgnoreWhitespace'隻影響純粹由空白組成的文本節點。在這種情況下,''包含文本節點「\ r \ n····值\ r \ n」。 – 2013-05-04 16:35:41

+0

感謝您的回覆。我個人也想切換到LINQ,但我的項目需要使用'.net 2.0'構建。 – Razer 2013-05-04 16:36:46

+0

@Razer:你仍然可以使用'XmlDocument',它比'XmlReader'更易於使用 - 至少,我當然覺得它更容易。 – 2013-05-04 16:43:44