C#如何读取xml文件里面节点里面的属性信息?

C#如何读取xml文件里面节点里面的属性信息?,第1张

using System.Xml

XmlDocument xmlDoc = new XmlDocument()

xmlDoc.Load(Server.MapPath("这里是你的XML的地址"))

XmlNode cNodes = xmlDoc.SelectSingleNode("columns")

for (int i = 0i <cNodes.ChildNodes.Counti++)

{

XmlNode c = cNodes.ChildNodes[i]

c.Attributes["hidden"].Value//这里就取到hidden的值

c.Attributes["show"].Value// 这里就取到show的值

}

field="name" 这个也是节点属性啊。

大哥,代码很详细了吧,给分,给分!!!!!!!

1. dynamicField 的作用是什么?

如果你需要在schema.xml文件中的<field>......</field>部分定义多个<field>(math_score,chinese_score,english_score,....),而恰好这些<field>的type属性又相同(type="integer"),那么就可以借助 dynamicField 用一个句子完成

这样,在一个document中,就可以使用math_score,chinese_score,english_score 这些字段名,虽然在schema.xml文件中并未对它们进行一一定义。

dynamicField就是动态栏位, 要是你有太多栏位无法一一设定,你可以用dynamicField处理像下面这第一个dynamicField就是戚蔽说, 所有栏位是以 _i做结尾的 (如 a_i, sss_i, id_i等等)都套用这个设定.

<dynamicField name="*_i" type="integer" indexed="true" stored="true"/>

<dynamicField name="*_t" type="text" indexed="true"大仔尘 stored="true"/>

<dynamicField name="*_f" type="float" indexed="true" stored="true"/>

<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>

<dynamicField name="*_d" type="date" indexed="true" stored="true"/>

<dynamicField name="*_s" type="string" indexed="true" stored="true"/>

<dynamicField name="*_ri" type="sint" indexed="滚禅true" stored="true"/>

<dynamicField name="*_rf" type="sfloat" indexed="true" stored="true"/>

<dynamicField name="*_facet" type="string" indexed="true" stored="true"/>

</fields>

2. sortMissingLast 和 sortMissingFirst对<field>的属性之一。只在对该<field>进行排序时,才起作用。

sortMissingLast = true时,那些在该<field>上没有值的documents将被排在那些在该<field>上有值的documents之后。

sortMissingFirst = true时的情况正好相反。

如果两者都设为false,则使用Lucene的排序。

3. positionIncrementGap=100 只对 multiValue = true 的fieldType有意义。

http://svn.apache.org/repos/asf/lucene/solr/trunk/example/solr/conf/schema.xml

Suppose a document has a multi-valued "author" field. Like this:

author: John Doe

author: Bob Smith

With a position increment gap of 0, a phrase query of "doe bob" would

be a match. But often it is undesirable for that kind of match across

different field values. A position increment gap controls the virtual

space between the last token of one field instance and the first token

of the next instance. With a gap of 100, this prevents phrase queries

(even with a modest slop factor) from matching across instances.

4.omitNorms

什么是Norm,现在还不懂????

5. LowerCaseFilterFactory的作用。

例如Kobe Bryant在分词后 kobe 不能搜索到结果 Kobe可以,虽然这个是中文分词

法,但经常有中英混输的情况,如果在输入英文后,查不到结果,也是比较失望的,

另外我看了你的源代码,建议在词库的引进上采用单例模式,在web应用上会比较好,

谢谢你的帮助,另外我看了solol的mmseg的接口比较不错,你是否有意看看,另外再

次感谢你的solr分词

Comment 1 by chenlb2008, Aug 16, 2009英文小写,好办,用 <filter class="solr.LowerCaseFilterFactory"/>就行,详情请

看:http://blog.chenlb.com/2009/04/solr-chinese-segment-mmseg4j-use-demo.html

solol 基本没看,我只是怕看了会影响我的设计思路。

也准备实现 http://chenlb.javaeye.com/blog/439843 提到的一些功能。

多谢你的关注。希望继续提出你的看法。

以下内容是从网上找到的

=====================

Solr schema.xml 的介绍

Tuesday, 1. April 2008, 07:23:25

solr

原来我是打算将Solr wiki里的介绍直接翻译成中文, 後来写一写觉得, 翻译的内容太复杂, 很难懂. 所以在这里我就直接拿一个schema.xml范例来介绍好了. 希望能帮助大家了解schema.xml

<?xml version="1.0" ?>

The Solr schema file. This file should be named "schema.xml" and should be in the conf directory under the solr home (i.e. ./solr/conf/schema.xml by default) or located where the classloader for the Solr webapp can find it.

For more information, on how to customize this file, please see… wiki.apache.org/solr/SchemaXml

<schema name="solr" version="1.1">

资料型态, 你的资料可能要分很多不同型态做资料建置以便solr引擎做检索, 就像一般资料库一样, 要对存入的资料做型态分类. 以下有string, boolean, integer, long, float, double 等等的资料型态, 就依你的须求做设定. 每一个fieldtype 都有几个参数可设定, 其中name就是你给这个fieldtype的名子, 你可以随你的方便取名. class是solr用的,就不可以乱取, 要针对你这个fieldtype的资料型态来告诉solr这个fieldtype里的资料是什麼样类型的资料,如 integer, text, string, long等等.

後面的sortMissingLast, omitNorms等设定你可以参考solr wiki schemalXml的介绍, 再依你的须求使用. 请参考下列范例.

<types>

<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>

<fieldtype name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/>

<fieldtype name="integer" class="solr.IntField" omitNorms="true"/>

<fieldtype name="long" class="solr.LongField" omitNorms="true"/>

<fieldtype name="float" class="solr.FloatField" omitNorms="true"/>

<fieldtype name="double" class="solr.DoubleField" omitNorms="true"/>

<fieldtype name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>

<fieldtype name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>

<fieldtype name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/>

<fieldtype name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/>

<fieldtype name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/>

如果是TextField的资料型态, 你可以用不同的Analyzer, Tokenizer, Filter对这个fieldtype的资料做处理. 像是中文切词, 删除前後空白, 或同义词等等. 可依你的须求使用. 请参考下列范例.

<fieldtype name="text_ws" class="solr.TextField" positionIncrementGap="100">

<analyzer>

<tokenizer class="solr.WhitespaceTokenizerFactory"/>

</analyzer>

</fieldtype>

<fieldtype name="text" class="solr.TextField" positionIncrementGap="100">

<analyzer type="index">

<tokenizer class="solr.WhitespaceTokenizerFactory"/>

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>

<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>

<filter class="solr.LowerCaseFilterFactory"/>

<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>

<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

</analyzer>

<analyzer type="query">

<tokenizer class="solr.WhitespaceTokenizerFactory"/>

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>

<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>

<filter class="solr.LowerCaseFilterFactory"/>

<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>

<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

</analyzer>

</fieldtype>

<fieldtype name="textTight" class="solr.TextField" positionIncrementGap="100" >

<analyzer>

<tokenizer class="solr.WhitespaceTokenizerFactory"/>

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>

<filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>

<filter class="solr.LowerCaseFilterFactory"/>

<filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>

<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

</analyzer>

</fieldtype>

</types>

设置好资料fieldType的型态後, 就是将这些fieldType套入对应的document fields. 只能多不能少. 也就是说假设你有一个document里有 id, name, default等资料, 你的schema.xml不可以只有id, default这两个field. 你一定要还要有name这个field. 但是你schema.xml里若有id, name, defualt, text这四个栏位, 你的document却可以只有id, default这两个栏位.

<fields>

<field name="id" type="string" indexed="true" stored="true"/>

上面这个栏位(field)是给你document里的id栏用, 型态为string, 要index, 也要储存在你的资料库里

<field name="default" type="text" indexed="true" stored="false" multiValued="true"/>

<field name="name" type="text" indexed="true" stored="false" multiValued="true"/>

dynamicField就是动态栏位, 要是你有太多栏位无法一一设定,你可以用dynamicField处理像下面这第一个dynamicField就是说, 所有栏位是以 _i做结尾的 (如 a_i, sss_i, id_i等等)都套用这个设定.

<dynamicField name="*_i" type="integer" indexed="true" stored="true"/>

<dynamicField name="*_t" type="text" indexed="true" stored="true"/>

<dynamicField name="*_f" type="float" indexed="true" stored="true"/>

<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>

<dynamicField name="*_d" type="date" indexed="true" stored="true"/>

<dynamicField name="*_s" type="string" indexed="true" stored="true"/>

<dynamicField name="*_ri" type="sint" indexed="true" stored="true"/>

<dynamicField name="*_rf" type="sfloat" indexed="true" stored="true"/>

<dynamicField name="*_facet" type="string" indexed="true" stored="true"/>

</fields>

uniqueKey就像一般database的primary key一样, 也就是说整个资料库里的每一笔资料的id栏位不可以与另一笔资料的id栏位有相同值.

<uniqueKey>id</uniqueKey>

defaultSearchField就是你在做query搜寻时若不指定特定栏位做检索时, Solr就会只查这个栏位.

<defaultSearchField>default</defaultSearchField>

copyField是用来复制你一个栏位里的值到另一栏位用. 如你可以将name里的东西copy到default里, 这样solr做检索时也会检索到name里的东西.

<copyField source="name" dest="default"/>

这里defaultOperator设为 "AND", 就是说当你输入的查寻词句有空白时 ex. "远东 餐厅", Solr搜寻解析器会当做你的query指令为"远东AND餐厅". 若是设为 "OR" 就会变成"远东OR餐厅".

<solrQueryParser defaultOperator="AND"/>

</schema>

这就是一个简单的schema.xml介绍!

你选橡核举中的是什么?节点、文本、属氏高性?

要梁碧改的是什么?修改节点、属性、文本?

那我假设选中的是节点,要改属性值:

使用setAttribute()方法可改变已有属性值,或创建一个新属性。下面的代码向 元素添加了名为 “add\" 的新属性(值是 “a\"):

x=xmlDoc.getElementsByTagName(“field\")

x[0].setAttribute(“add\",“a\")

使用nodeValue 属性可更改属性节点的值:

x=xmlDoc.getElementsByTagName(“field”)[0].


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12236396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存