在我的XML中,我有一个像
这样的元素<myElement myAttribute="myNamespacePrefix:foobar"/>
此文件中有一个xmlns声明:
<xmlns:myNamespacePrefix="http://www.mydomain.com/blah#"/>
我想根据myAttribute的值创建一个URI。
IE,我想:
http://www.mydomain.com/blah#foobar
听起来很简单,不是吗?
那么简单的解决方案是什么?
我在框架或MSDN上找不到任何内容,所以我不得不写下这个毫无疑问的错误混乱:
public static Uri GetUri(string value, XElement containingElement)
{
if (value.Contains(":"))
{
var prefix = String.Concat(value.TakeWhile(c => c != ':'));
XNamespace ns;
if (containingElement.GetNamespaceOfPrefix(prefix) != null)
ns = containingElement.GetNamespaceOfPrefix(prefix);
else ns = containingElement.GetDefaultNamespace();
var localName = String.Concat(value.SkipWhile(c => c != ':').Skip(1));
Contract.Assert(ns != null);
if (String.IsNullOrWhiteSpace(ns.NamespaceName))
return new Uri(value);
else
{
StringBuilder sb = new StringBuilder(ns.NamespaceName);
if (!ns.NamespaceName.EndsWith("#"))
{
sb.Append('#');
}
return new Uri(String.Format(CultureInfo.CurrentCulture, "{0}{1}", sb.ToString(), localName));
}
}
else // no namespace prefix
{
String fragment;
if (!value.StartsWith("#"))
fragment = value.Insert(0, "#");
else
fragment = value;
var uriString = String.Format(CultureInfo.CurrentCulture, "{0}{1}", containingElement.BaseUri, fragment);
return new Uri(uriString);
}
}
答案 0 :(得分:0)
我最近做了一些与XML相关的事情。这是我用来从C#中获取XML信息的一个例子:
XmlDocument XML = new XmlDocument();
XML.LoadXml(/* XML data in string format goes here */);
然后你可以做以下事情:
if (XML["myElement"] != null)
{
string myAttributeStr = XML["myElement"].Attributes["myAttribute"].Value.ToString().Trim();
}