其它格式化器

Version 23.4.8843


其它格式化器


以下是与解析 XML 和 CSV 的运算器一起使用的格式化器列表。

xpath(value)

xpath 格式化器可以在调用有 XML DOM 可用的 XML 运算器时使用。xmlDOMSearch 和 xmlDOMGet 运算器用于解析 XML 文档,而 xpath 格式化器是 DOM 对象的格式化器,其功能与其它格式化器一样,是从 XML 文档中生成值。xpath 格式化器返回 XML 文档的当前 XPath 位置。

  • value:可选值,相对 XPath 字符串,用于查找相关的 XML 值。

xpath 示例

在以下代码片段中,XML 文档是在 ArcScript 的内存中定义的。

<arc:set attr="text">
  <root>
    <A>遥遥领先</A>
    <A>
      <B>
        <C>继续领先</C>
      </B>
    </A>
    <A>
      <B>永远领先</B>
    </A>
  </root>
</arc:set>

在以下代码片段中,调用 xmlDOMSearch 操作并从示例 XML 文档中显示 XPath 格式化器。

<arc:call op="xmlDOMSearch?xpath=/root/A">
  当前 XPath 是 [xpath],'B' 元素值为 [xpath(B) | empty("未指定")]
</arc:call>

当针对前面的 XML 文档运行时,此代码将显示以下输出。

当前 XPath 是 /root/A[1],'B' 元素值为 未指定
当前 XPath 是 /root/A[2],'B' 元素值为 未指定
当前 XPath 是 /root/A[3],'B' 元素值为 永远领先

在前面的示例中,XPath 格式化器迭代显示的三个 A 元素。 但仅显示最终 B 元素中的 “永远领先”,因为 [xpath(B)] 会忽略其他元素中的值。

xpathcount(value)

xpathcount 格式化器与 xpath 格式化器非常相似,不同之处在于它返回与所提供的 XPath 匹配的元素的计数。 它可以在对具有可用 XML DOM 的 XML 操作的调用中使用。 可以使用 xmlDOMSearch 和 xmlDOMGet 运算器来解析 XML 文档,而 xpathcount 格式化器是 DOM 对象的格式化器,其功能与其他格式化器类似,通过从 XML 文档生成计数来实现。

  • value: 可选值,相对 XPath 字符串,用于查找相关的 XML 元素。

xpathcount 示例

<arc:set attr="xml.xpath" value="/Items/Cars/Subaru" />
<arc:set attr="xml.text">
 <Items>
  <Cars>
    <Subaru>
      <Color>Blue</Color>
      <Year>2017</Year>
    </Subaru>
    <Honda>
      <Color>Red</Color>
    </Honda>
  </Cars>
</Items>
</arc:set>
<arc:call op="xmlDOMSearch" in="xml" out="result">
  <!-- xpathcount 是 ArcScript 中的上下文相关函数。 如果 XML 文档加载到
        search,xpathcount 返回与提供的 xpath 匹配的元素数量的计数。 -->
  <arc:set attr="output.Data" value="[xpathcount('/Items/Cars/*/Color')]" />
</arc:call>

<arc:set attr="output.filename" value="test.txt" />
<arc:push item="output" />

运行此代码时,它会返回“2”作为输出。

xsubtree(value)

可以使用 xsubtree 从嵌套的 XML 结构中解析 XML 树。

xsubtree 示例

在下面的示例 XML 文档中,/Event/Attendees 下有三个条目。

<arc:set attr="xml.text">
<Event>
    <Subject>Meeting</Subject>
    <Attendees>
        <User>
            <Code>1</Code>
            <Name>TEST1</Name>
        </User>
        <User>
            <Code>2</Code>
            <Name>TEST2</Name>
        </User>
        <User>
            <Code>3</Code>
            <Name>TEST3</Name>
        </User>
    </Attendees>
</Event>
</arc:set>

<arc:set attr="xml.xpath" value="/Event/Attendees" />
<arc:call op="xmlDOMSearch" in="xml">
  [xsubtree(.)]  <!-- 在括号中插入所需的 XPath -->
</arc:call>

xsubtree 命令中的 . 字符指示脚本使用当前的 xpath。在本例中,路径是 /Event/Attendees ,它返回所有三个条目:

<User>
  <Code>1</Code>
  <Name>TEST1</Name>
</User>
<User>
  <Code>2</Code>
  <Name>TEST2</Name>
</User>
<User>
  <Code>3</Code>
  <Name>TEST3</Name>
</User>

如果你只想显示在 /Event/Attendees xpath 中第二次出现的 User 子树,你可以用 xsubtree(User\[2\]) 替换该命令。这样做的结果将是:

<User>
  <Code>2</Code>
  <Name>TEST2</Name>
</User>

csv(value)

从 CSV 文件加载数据后,可以使用 csv 格式化器。csvListRecords 运算器用于解析 CSV 文件,csv 格式化器是 CSV 数据的格式化器,其功能与其它格式化器一样,从 CSV 文档中生成值。

  • value:CSV 列标题的字符串,用于查找该列的值。请注意,如果 CSV 文件没有标题,如果 “requireheader” 属性被设置为 false,则可以通过通用索引(c1, c2, c3, …)访问列。

csv 示例

在以下片段中,ArcScript 在内存中定义了一个 CSV 文档。

<arc:set attr="data" value=
"column1,column2,column3
entry1,entry2,entry3
entry4,entry5,entry6"
/>

在下面的例子中,调用 “csvListRecords” 运算器,从示例 CSV 文档中显示 CSV 格式。

<arc:call op="csvListRecords">
Row [_index] values: [csv('column1')], [csv('column2')], [csv('column3')]
</arc:call>

这段代码将显示以下输出:

Row 1 values: entry1, entry2, entry3
Row 2 values: entry4, entry5, entry6

[myitem.value | csvescape()]

csvescape 格式化器从匹配值的列中返回 CSV 数据,每个元素以单独的结果输出。

csvescape Example

在下面的例子中,csv 格式化器和 csvescape 选项都是从 CSV 文档示例中输出的。

<arc:call op="csvListRecords">
Standard output: [csv('column1')], [csv('column2')], [csv('column3')]
Output with csvescape(): [csv('column1') | csvescape()], [csv('column2') | csvescape()], [csv('column3') | csvescape()]
</arc:call>

这段代码将在 CSV 标题下的第一行显示以下输出。

Standard output: entry1, entry2, entry3
Output with csvescape(): "entry1", "entry2", "entry3"