2012-02-21 106 views
2

如果我是說創建一個函數:如何插入(C#)的XML變量

public static string createProduct(string pName, decimal pPrice) 
{string postData = @"<?xml version=""1.0"" encoding=""UTF-8""? 
        <product> 
         <name>?</name> 
         <price>?</price> 
        </product>"; 
....some other codes...} 

我曾嘗試使用Google,但沒有發現任何明確的答案...... 和抱歉,我有點新的xml和c#,所以我如何將pName和pPrice插入xml而不會影響Visual Studio?

真的很感謝你們的幫助...... tia!

+1

在問這個問題之前,你看過** String.Format **嗎?你的問題顯示你完全缺乏研究。在C#中構建字符串是一項非常簡單的任務。 – 2012-02-21 18:18:20

+0

非常抱歉的noob問題...我會研究一下,謝謝! – marcPerry 2012-02-21 18:28:49

+0

如果您使用XML代表代碼中的對象,我建議您查看XML序列化。 – walkingTarget 2012-02-21 18:47:50

回答

5
var str = new XElement("product", 
        new XElement("name", pName), 
        new XElement("price", pPrice)) 
      .ToString(); 

System.Xml.Linq NamespaceXElement class的好地方開始閱讀,更容易比System.Xml命名空間

+1

+1非常好,很好的答案。由於OP是一個自稱初學者,你可能想要解釋代碼究竟做了什麼。 – Yuck 2012-02-21 18:28:53

1
public static string createProduct(string pName, decimal pPrice) 
{string postData = @"<?xml version=""1.0"" encoding=""UTF-8""? 
        <product> 
         <name>" + pName + @"</name> 
         <price>" + pPrice+ @"</price> 
        </product>"; 
....some other codes...} 

我建議你看一看由字符串連接不構建XML文檔,因爲它是非常不可靠的(如果有什麼PNAME包含尖括號?)。嘗試查看XElement(XLINQ)API。

+0

這有可能導致整個XML文檔格式不正確或者無法使用,具體取決於輸入。我不會推薦這個解決方案; OP應該改用XML DOM。另外,你在XML中引入'@' - 你打算這麼做嗎? – Yuck 2012-02-21 18:21:20

+1

at標誌是一個錯誤,謝謝。我強調了我的警告文字,因爲我完全同意你的意見。然而,我認爲最好總是直接給出答案。只是說「你不應該這樣做」是不夠的。 – usr 2012-02-21 18:25:46

0

一個谷歌搜索how to add variables to a string in c#產生此頁面的第一個結果:Strings (C# Programming Guide)

可以使用+運算符連接字符串(即編譯到string.Concat方法)。或者,您可以使用string.Format;欲瞭解更多信息,請參閱composite formatting的頁面。這種方法僅適用於最簡單的小型XML片段。

您還有幾個選項可以幫助您構建和使用XML,其中大部分都可以在System.Xml namespaces中找到。這些類將生成格式良好的XML,處理您可能忽略的小細節(例如,特定字符的特殊處理)。不幸的是,我不清楚每種方法的優缺點。

0

我真的不建議用字符串連接這樣做是爲了使用。有很多不同的方法可以實現這一點,從而產生更好的結果(因爲不太可能產生格式不正確的XML)。

通過XmlTextWriter

string xmlString = null; 

using (StringWriter xmlOutput = new StringWriter()) 
using(XmlTextWriter xmlWriter = new XmlTextWriter(xmlOutput)) 
{ 
    xmlWriter.WriteStartDocument(); 
    xmlWriter.WriteStartElement("product"); 
    xmlWriter.WriteElementString("name", pName); 
    xmlWriter.WriteElementString("price", pPrice); 
    xmlWriter.WriteEndElement(); 

    xmlString = xmlOutput.ToString(); 
} 

使用XmlDocument

string xmlString = null; 

    using (StringWriter xmlOutput = new StringWriter()) 
    { 
     XmlDocument xmlDocument = new XmlDocument(); 

     XmlElement productElement = xmlDocument.CreateElement("product"); 

     XmlElement nameElement = xmlDocument.CreateElement("name"); 
     nameElement.InnerText = pName; 

     XmlElement priceElement = xmlDocument.CreateElement("price"); 
     priceElement.InnerText = pPrice; 

     productElement.AppendChild(nameElement); 
     productElement.AppendChild(priceElement); 
     xmlDocument.AppendChild(productElement); 

     xmlDocument.Save(xmlOutput); 

     xmlString = xmlOutput.ToString(); 
    } 

使用XDocument(要求您使用的是.NET 3.5或更高版本)的這些

XDocument xml = new XDocument(
           new XElement("product", 
                new XElement("name", pName), 
                new XElement("price", pPrice) 
             ) 
          ); 

string xmlString = xml.ToString(); 

注只有使用XmlTextWriter的方法纔會使用流這對於非常大的XML組合非常重要。如果您使用的是.NET 3.5或更高版本,並且沒有處理非常大的XML組合,那麼我會優先使用XDocument,因爲它更易讀易用。