2014-09-11 32 views
0

我有一段代碼,看起來像這樣(它從一個XIB文件的)分離一行代碼找到一個特定部分

<tabBar contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZTF-8n-Y8A"> 
    <rect key="frame" x="2" y="431" width="320" height="49"/> 
    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> 
    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> 
    <items> 
      <tabBarItem title="Item" id="vcz-nP-1al"/> 
      <tabBarItem title="Item" id="9mv-O2-GXB"/> 
    </items> 
</tabBar> 

我通過搜索找到的塊的第一行ID使用以下

foreach(var search in Outlets.Values) 
{ 
    var ui = new UIObject(); 
    var fullSearch = string.Format("id=\"{0}\"", search); 
    using (var reader = File.OpenText(infile)) 
    { 
     var line = await reader.ReadLineAsync(); 
     if (line.Contains(fullSearch)) 

,其中奧特萊斯是一個字典

我可以抓住整個文件中讀取並存儲在一個字符串或更可能的是,一個字符串生成器對象。

我想要做的是搜索塊的關鍵部分 - 例如,width =「320」。我需要從字符串的其餘部分分開width =「320」,然後刪除320部分。

我確實考慮過使用IndexOf(「width」),然後計數6以得到引號的內部直到下一個引號,但這可能相當低效 - 特別是如果字符串很長。

有沒有辦法以我描述的方式取一部分字符串?

+0

String.Substring(索引,長度) 。 http://msdn.microsoft.com/en-us/library/aka44szs%28v=vs.110%29.aspx – 2014-09-11 02:40:34

+2

你可以使用'XDocument.Parse'將內容讀入'XDocument'。 – Hassan 2014-09-11 02:41:42

+0

XIB文件是XML,因此最好使用XML解析器而不是直接字符串操作。 http://stackoverflow.com/questions/2551307/modify-xml-existing-content-in-c-sharp有一些關於如何在C#中使用XDocument編輯XML的例子。 http://stackoverflow.com/questions/6593243/remove-attributes-from-xelement有一些關於如何從XML元素中刪除屬性的例子。 – NickAb 2014-09-11 02:44:13

回答

0

您可以嘗試將其解析爲XML。例如,獲取寬度值:

string str = @"<tabBar contentMode=""scaleToFill"" translatesAutoresizingMaskIntoConstraints=""NO"" id=""ZTF-8n-Y8A""> 
    <rect key=""frame"" x=""2"" y=""431"" width=""320"" height=""49""/> 
    <autoresizingMask key=""autoresizingMask"" widthSizable=""YES"" flexibleMinY=""YES""/> 
    <color key=""backgroundColor"" white=""0.0"" alpha=""0.0"" colorSpace=""calibratedWhite""/> 
    <items> 
      <tabBarItem title=""Item"" id=""vcz-nP-1al""/> 
      <tabBarItem title=""Item"" id=""9mv-O2-GXB""/> 
    </items> 
</tabBar>"; 

XDocument xdoc = XDocument.Parse(str); 
string width = xdoc.Root.Element("rect").Attribute("width").Value; 
0

您可以試試此代碼示例。

var xml = XDocument.Load("in.xml"); 

if (xml.Root != null) 
{ 
    var elements = xml.Root.XPathSelectElements("//*[@width]"); 
    foreach (var element in elements) 
    { 
     element.Attribute("width").Remove(); 
    } 
} 

xml.Save("out.xml"); 

首先我們讀取並解析XML文件到XDocument(XDocument.Load)。 然後使用XPathxml.Root.PathSelectElements)我們選擇所有具有屬性width(即XPath //*[@width]代表的內容)的元素。 之後,我們只需遍歷找到的元素並刪除屬性width。 此代碼示例將刪除所有width屬性,如果您只需要爲特定標記或特定值刪除屬性,則應該修改XPath。

如果您只需要一個特定元素(如標籤rect)刪除屬性,不是你可以使用

root.Element("rect".Attribute("width").Remove(); 

,而不是XPath和foreach循環

相關問題