2014-07-10 197 views
-3

我想搜索xml文件中的元素值並從中獲取特定的字符串。舉例來說,我有以下元素值在我的XML文件:c#:在字符串數組中搜索並獲取特定的字符串值

<Content>Shape="Rectangle" Tooltip="data" StrokeThickness="2" Tag="default" </Content> 

現在我想讀這Content並獲得Tooltip值作爲我的結果字符串,應該給我的「數據」。我想要的東西像:

string restuledString = Tooltip.value 

如何做到這一點?

更新:

這是一個完整的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<Topologies> 
    <ConfigurationItems> 
    <ConfigurationItem Label="Default Tag"> 
     <Attribute Name="display_lable" Label="Display Label" Type="clas java.lang.String" Value="Default Tag" /> 
     <Attribute Name="MemorySize" Label="MemorySize" Type="class java.lang.Integer" Value="Default Tag" /> 
     <Attribute Name="Description" Label="Description" Type="class java.lang.String" Value="SunOS" /> 
     <Attribute Name="DiscoveredModel" Label="DiscoveredModel" Type="class java.lang.String" Value="Oracle Corporation sun4v SPARC T5-4" /> 
     <X>289</X> 
     <Y>108.53999999999999</Y> 
     <Width>130</Width> 
     <Height>117</Height> 
     <ID>ed56efb4-6bdd-4dc7-8b79-db5e9b8484f1</ID> 
     <zIndex>0</zIndex> 
     <IsGroup>false</IsGroup> 
     <ParentID>00000000-0000-0000-0000-000000000000</ParentID> 
     <Content>&lt;Rectangle StrokeThickness="2" Tag="Default Thread Tag" ToolTip="data" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dd="clr-namespace:DiagramDesigner;assembly=ADAX_GUI"&gt;&lt;Rectangle.Style&gt;&lt;Style TargetType="Rectangle"&gt;&lt;Style.BasedOn&gt;&lt;Style TargetType="Rectangle"&gt;&lt;Style.Resources&gt;&lt;ResourceDictionary /&gt;&lt;/Style.Resources&gt;&lt;Setter Property="UIElement.RenderTransform"&gt;&lt;Setter.Value&gt;&lt;SkewTransform AngleX="-15" AngleY="0" CenterX="50" CenterY="25" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.Fill"&gt;&lt;Setter.Value&gt;&lt;LinearGradientBrush StartPoint="0,0" EndPoint="0,1"&gt;&lt;LinearGradientBrush.GradientStops&gt;&lt;GradientStop Color="#FFFAFBE9" Offset="0" /&gt;&lt;GradientStop Color="#FFFFA500" Offset="1" /&gt;&lt;/LinearGradientBrush.GradientStops&gt;&lt;/LinearGradientBrush&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.Stroke"&gt;&lt;Setter.Value&gt;&lt;SolidColorBrush&gt;#FFD69436&lt;/SolidColorBrush&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.StrokeThickness"&gt;&lt;Setter.Value&gt;&lt;s:Double&gt;1&lt;/s:Double&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.StrokeLineJoin"&gt;&lt;Setter.Value&gt;&lt;x:Static Member="PenLineJoin.Round" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.Stretch"&gt;&lt;Setter.Value&gt;&lt;x:Static Member="Stretch.Fill" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="UIElement.IsHitTestVisible"&gt;&lt;Setter.Value&gt;&lt;s:Boolean&gt;False&lt;/s:Boolean&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="UIElement.SnapsToDevicePixels"&gt;&lt;Setter.Value&gt;&lt;s:Boolean&gt;True&lt;/s:Boolean&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;/Style&gt;&lt;/Style.BasedOn&gt;&lt;Style.Resources&gt;&lt;ResourceDictionary /&gt;&lt;/Style.Resources&gt;&lt;Setter Property="Shape.StrokeDashArray"&gt;&lt;Setter.Value&gt;&lt;DoubleCollection&gt;1.5 0.7&lt;/DoubleCollection&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;/Style&gt;&lt;/Rectangle.Style&gt;&lt;dd:DesignerItem.DragThumbTemplate&gt;&lt;ControlTemplate&gt;&lt;Rectangle Name="ThreadShape" Width="250" Height="150"&gt;&lt;Rectangle.Style&gt;&lt;Style TargetType="Rectangle"&gt;&lt;Style.BasedOn&gt;&lt;Style TargetType="Rectangle"&gt;&lt;Style.BasedOn&gt;&lt;Style TargetType="Rectangle"&gt;&lt;Style.Resources&gt;&lt;ResourceDictionary /&gt;&lt;/Style.Resources&gt;&lt;Setter Property="UIElement.RenderTransform"&gt;&lt;Setter.Value&gt;&lt;SkewTransform AngleX="-15" AngleY="0" CenterX="50" CenterY="25" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.Fill"&gt;&lt;Setter.Value&gt;&lt;LinearGradientBrush StartPoint="0,0" EndPoint="0,1"&gt;&lt;LinearGradientBrush.GradientStops&gt;&lt;GradientStop Color="#FFFAFBE9" Offset="0" /&gt;&lt;GradientStop Color="#FFFFA500" Offset="1" /&gt;&lt;/LinearGradientBrush.GradientStops&gt;&lt;/LinearGradientBrush&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.Stroke"&gt;&lt;Setter.Value&gt;&lt;SolidColorBrush&gt;#FFD69436&lt;/SolidColorBrush&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.StrokeThickness"&gt;&lt;Setter.Value&gt;&lt;s:Double&gt;1&lt;/s:Double&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.StrokeLineJoin"&gt;&lt;Setter.Value&gt;&lt;x:Static Member="PenLineJoin.Round" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.Stretch"&gt;&lt;Setter.Value&gt;&lt;x:Static Member="Stretch.Fill" /&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="UIElement.IsHitTestVisible"&gt;&lt;Setter.Value&gt;&lt;s:Boolean&gt;False&lt;/s:Boolean&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="UIElement.SnapsToDevicePixels"&gt;&lt;Setter.Value&gt;&lt;s:Boolean&gt;True&lt;/s:Boolean&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;/Style&gt;&lt;/Style.BasedOn&gt;&lt;Style.Resources&gt;&lt;ResourceDictionary /&gt;&lt;/Style.Resources&gt;&lt;Setter Property="Shape.StrokeDashArray"&gt;&lt;Setter.Value&gt;&lt;DoubleCollection&gt;1.5 0.7&lt;/DoubleCollection&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;/Style&gt;&lt;/Style.BasedOn&gt;&lt;Style.Resources&gt;&lt;ResourceDictionary /&gt;&lt;/Style.Resources&gt;&lt;Setter Property="UIElement.IsHitTestVisible"&gt;&lt;Setter.Value&gt;&lt;s:Boolean&gt;True&lt;/s:Boolean&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.Fill"&gt;&lt;Setter.Value&gt;&lt;SolidColorBrush&gt;#00FFFFFF&lt;/SolidColorBrush&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;Setter Property="Shape.Stroke"&gt;&lt;Setter.Value&gt;&lt;SolidColorBrush&gt;#00FFFFFF&lt;/SolidColorBrush&gt;&lt;/Setter.Value&gt;&lt;/Setter&gt;&lt;/Style&gt;&lt;/Rectangle.Style&gt;&lt;/Rectangle&gt;&lt;/ControlTemplate&gt;&lt;/dd:DesignerItem.DragThumbTemplate&gt;&lt;/Rectangle&gt;</Content> 
    </ConfigurationItem> 
    </ConfigurationItems> 
    <Connections /> 
</Topologies> 
+0

您錯誤鍵入了XML嗎? ''看起來像屬性應該在''標籤內 –

+0

發佈完整的XML或完整的樣本,我們應該如何建議只有一個節點? – DGibbs

+1

MSDN上有很多關於解析xml的教程.. – Sayse

回答

1
如果你只想分析你的XML節點的文本(這你必須讓你自己,因爲你沒

「T提供有關XML結構的任何信息),你可以做到這一點討厭的方式:

string yourNodeValue = @"Shape=""Rectangle"" Tooltip=""data"" StrokeThickness=""2"" Tag=""default"""; 
string output; 
var keysAndValues = yourNodeValue.Split(' ').Select (nv => nv.Trim()) 
foreach(var keyValue in keysAndValues) 
{ 
    var pair = keyValue.Split('='); 
    if(pair[0] == "Tooltip") 
    { 
     output = pair[1].Trim('"'); 
     break; 
    } 
} 

不過,我認爲總會有key="value"格式保存,之間沒有空格。 或者你可以只使用正則表達式groupping模式Shape=\"(\w+)\"

+0

我試過你的代碼,它給了我正是我想要的。非常感謝! –

1

你可以嘗試這樣的事:

var xml = "<Content> Shape=\"Rectangle\" Tooltip=\"data\" StrokeThickness=\"2\" Tag=\"default\" </Con" + 
"tent>"; 


using(var xmlReader = XmlReader.Create(new StringReader(xml))) 
{ 
    while(xmlReader.Read()) 
    { 
     var regex = "Tooltip=\"[a-zA-Z0-9]+\""; 
     var match = Regex.Match(xmlReader.Value, regex).Value.Replace("Tooltip=\"", "").Replace("\"", ""); 

     if(!string.IsNullOrEmpty(match)) 
     { 
      var restuledString = match;   
     }   
    } 
} 
0

如果你有一個深入探討您的文件,你可能會認識到這是內部的XML結構的內容標籤。 您可以像這樣讀取它,然後將其作爲xml內容加載:

var xmlfilecontent = IO.File.ReadAllText("yourfilename");   
    xmlfilecontent = xmlfilecontent.Replace("&gt;&lt;", ">\n<"); 
    xmlfilecontent = xmlfilecontent.Replace("&lt;", "<").Replace("&gt;", ">"); 
    IO.File.WriteAllText("yourfilenamel", xmlfilecontent);