我有一个查询CAML的XML配置:
<add key="QueryList" value="<Query><Where><Eq><FieldRef Name='Cargar_x0020_Optimyth'/><Value Type='Boolean'>1</Value></Eq></Where></Query>" />
<add key="PaginacionList" value="10" />
<add key="QueryOptions" value="<IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns><Paging ListItemCollectionPositionNext=''/>" />
现在,我想这样做:
XElement ndQuery = XElement.Parse(Configuracion.QueryList);
XElement ndViewFields = XElement.Parse(Configuracion.ViewFields);
XElement ndQueryOptions = XElement.Parse(Configuracion.QueryOptions);
但是我收到了错误。
我尝试使用XmlElement
及其工作:
XmlElement ndQuery = xmlDoc.CreateElement("Query");
if (!String.IsNullOrEmpty(Configuracion.QueryList))
{
ndQuery.InnerXml = Configuracion.QueryList;
}
XmlElement ndViewFields = xmlDoc.CreateElement("ViewFields");
if (!String.IsNullOrEmpty(Configuracion.ViewFields))
{
ndViewFields.InnerXml = Configuracion.ViewFields;
}
XmlElement ndQueryOptions = xmlDoc.CreateElement("QueryOptions");
if (!String.IsNullOrEmpty(Configuracion.QueryOptions))
{
ndQueryOptions.InnerXml = Configuracion.QueryOptions;
}
XElement ndQuery = XElement.Parse(ndQuery2.OuterXml);
XElement ndViewFields = XElement.Parse(ndViewFields2.OuterXml);
XElement ndQueryOptions = XElement.Parse(ndQueryOptions2.OuterXml);
我希望避免使用XmlElement
,而只使用XElement
。
关于它的任何解决方案?
答案 0 :(得分:0)
QueryOptions设置中的XML不是一个元素。它是两个兄弟元素。你需要一个围绕它们的人,在这种情况下是<QueryOptions>
:
<add key="QueryOptions"
value="<QueryOptions><IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns><Paging ListItemCollectionPositionNext=''/></QueryOptions>" />
答案 1 :(得分:-1)
相当复杂,因为Configuracion.QueryOptions
中有一个Xml片段(多个根节点)。 XLinq没有直接的方法来处理它...基于Fragmented XML string parsing with Linq,你可以
public static IEnumerable<XNode> ParseXml(string xml)
{
// Note the added escaping
// You can replace it with WebUtility.HtmlDecode
// They are defined in different assemblies
xml = HttpUtility.HtmlDecode(xml);
var settings = new XmlReaderSettings
{
ConformanceLevel = ConformanceLevel.Fragment,
IgnoreWhitespace = true
};
using (var stringReader = new StringReader(xml))
using (var xmlReader = XmlReader.Create(stringReader, settings))
{
xmlReader.MoveToContent();
while (xmlReader.ReadState != ReadState.EndOfFile)
{
yield return XNode.ReadFrom(xmlReader);
}
}
}
然后
XElement ndQuery = new XElement("Query", ParseXml(Configuracion.QueryList));
XElement ndViewFields = new XElement("ViewFields", ParseXml(Configuracion.ViewFields));
XElement ndQueryOptions = new XElement("QueryOptions", ParseXml(Configuracion.QueryOptions));
使用HttpUtility.HtmlDecode / WebUtility.HtmlDecode来自Built in .NET function for unescaping characters in XML stream?。
或许您希望保持配置的编码原样......然后
XElement ndQuery = new XElement("Query", HttpUtility.HtmlDecode(Configuracion.QueryList));
XElement ndViewFields = new XElement("ViewFields", HttpUtility.HtmlDecode(Configuracion.ViewFields));
XElement ndQueryOptions = new XElement("QueryOptions", HttpUtility.HtmlDecode(Configuracion.QueryOptions));
(更短:-))