提取的表情

提取的表情提供从输入XML文档流中的元素定位和提取数据的机制。

当我们定义映射规则时R,我们想让它匹配一个元素E输入流中。在内部定义的提取表达式R,允许R查找和提取数据EE的孩子。

提取表达式在xfMap中由<提取物>元素。它的expr属性保存其的值表达式字符串

<提取expr = "……" / >

表达式字符串允许从输入XML文档中提取以下内容:

  1. 匹配元素的文本内容当表达式字符串是唯一的:“。”
  2. 任何匹配元素的属性值-当表达式字符串的形式为:
    “@”attributeName
  3. 匹配元素的任何后代文本内容——当表达式字符串的形式为:
    “。/”immediateChild(' / '的后代)+
  4. 匹配元素的任何后代属性值——当表达式字符串的形式为:
    “。/”immediateChild(‘/’的后代)+(@“attributeName”)的

注意:注意:c和d以上的ImmediateChild和descendants是qname。因此,与匹配表达式中一样,QNames(如果有的话)的前缀必须绑定在xfMap的根元素(即元素)中的名称空间声明中。

一个元素可以在同一级别包含多个同名的子元素——如果是这种情况,那么第一个遇到的子元素就是将从中提取数据的子元素。要提取具有相同名称的第二个、第三个或第n个子元素的值,可以在QName后面添加索引。

提取表达式中的每个immediatecchild或后代的QName可以后跟一个索引,一个正数,包含在'{'和'}'中。索引指示的不是位置,而是该特定元素在其父元素上下文中的计数。

下面的示例说明了提取表达式的用法。考虑以下输入XML文档片段:

  子元素值 
<可以:>一个< /可以:>
<可以:b > first-b b > < /可以:
<可以:>第二< /可以:>
测试> < /可以:

首先,我们定义一个映射规则R在匹配的xfMap文档中< myElement >元素。R可以包含任意数量的提取表达式,e0e1e、…n的定义。(我们将忽略如何R的定义-现在我们只需要知道R使用这些提取表达式。)

< xfMap xmlns:可以:“my-test-uri”>…<!——调用这个映射规则R——> …<!——调用e0——> …<!——调用e1——> …<!——调用这个en——> …<!-- call this c0 --> 
<!记作c1 >
<提取expr = " . /可以:{2}" / >
< / >映射……< xfMap >

表达式字符串e0”,,是指文字内容<可以:myElement >,因此e0提取”这是文本内容。

中的表达式字符串e1e、…n引用属性的值a1,…,n因此每一个e1e、…n、提取valn val1……,分别。

表达式字符串c0”,。/可以:someChild,是指文字内容的衔接<可以:someChild >元素,因此c0提取”孩子的价值”。

c1中的表达式字符串,"。/pfx:a{2} ",指第二个元素的文本内容,因此c1提取" second-a "。

当表达式字符串指向的数据不在输入XML文档流中时,可以为提取表达式指定默认值。这默认值在xfMap中表示为默认的的属性<提取物>元素。

.

提取表达式也可以指定可选的为xmlpreserve-cdata,转义字符declare-namespaces属性。这是按照下列方法进行的:

 .

为xml属性设置为true时,提取表达式的目标将被提取为以目标为根的XML片段。默认情况下,在检索这个XML片段时,preserve-cdata设置为true。

preserve-cdata属性设置为true时,提取表达式通常会被处理,但有一个例外CDATA实体不会被忽略。也就是开始和结束CDATA标签将被视为文本。

转义字符属性默认为false,当设置为true时,读者将转义与XML标记一致的字符,例如," < "和" & "分别转义为" < "和" & "。注意,当数据在XML文档的上下文之外使用时,没有必要转义这些字符。

declare-namespaces属性默认为false,仅适用于以下情况为xml设置为true,即当使用提取表达式将XML子树从源文档映射到XML片段时。由于从源文档映射的XML片段的XML Namespace范围可能没有全部前缀绑定,将此属性设置为true将指示提取表达式在生成的XML片段中添加任何缺失的名称空间声明。这些XML名称空间有效片段随后可能会被替代的XML处理程序(例如XSLT和XQuery处理程序)进一步使用。

write-xml-header属性默认为false,仅适用于以下情况为xml设置为true,即当使用提取表达式将XML子树从源文档映射到XML片段时。