如何读取 INode 的值?

How to read value of an INode?

我从两个方面了解你,但不要如我所愿:

1. [INode].ToString();

这个returns我节点中的值加上一个“^^[predicate uri]”,像这样;

random node value.^^http://www.w3.org/2001/XMLSchema#string

2。 [INode].ReadXml(Xml reader); 我不知道怎么用,因为我找不到任何例子。

有没有办法只检索节点的值?

或者 "XmlRead()" 方法是我需要的吗?如何使用?

要获取内容,您应该使用 WriteXml 而不是 ReadXml 函数

var sb = new StringBuilder();
var xmlWriterSettings = new XmlWriterSettings
{   // It's required in my case but maybe not in your try different settings
    ConformanceLevel = ConformanceLevel.Auto
};
using (var writer = XmlWriter.Create(sb, xmlWriterSettings))
    rdfType.WriteXml(writer);
var result = sb.ToString();

我好像对XmlReader和XmlWriter理解有误,也理解了使用方法,但是好像没有弄明白。 我收到的这条消息:

InvalidOperationException: This XmlWriter does not accept Attribute at this state Content.

我想我确实需要调整 XmlWritterSettings 才能使其正常工作。

我没有看到关于读取 DotNetRDF INode 所需的 XmlWritterSettings 的任何文档,所以我现在将使用 "ToString()"。

这是节点持有的RDF/XML部分:

    <property:Paragraph rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Geef houvast.</property:Paragraph>

没有其他方法可以提取元素之间的 "Geef houvast." 吗?

感谢您现在帮助我理解 XmlReader/XmlWriter!

基于NodeType,您可以转换为适当的接口,然后访问值,例如

switch (node.NodeType)
{
  case NodeType.Literal:
    return ((ILiteralNode)node).Value;
  case NodeType.Uri:
    return ((IUriNode)node).Uri.ToString();
  // etc.
}

或者如果您确定您的节点是文字,您可能想使用 node.AsValuedNode().AsString()

请注意,ReadXml()/WriteXml() 方法用于 .Net XML 序列化,不适合一般用途。