【问题标题】:Wildcard file matching in XMLXML 中的通配符文件匹配
【发布时间】:2015-07-24 07:52:41
【问题描述】:

XML 文件包含<Wildcard> 标签,

       <Wildcard>r_prior*.obj</Wildcard>

我想访问名称为 r_prior[0-9].obj 的文件,可以有一个文件 r_prior_dummy.obj(我不需要),但使用当前代码它也需要 r_ram_dummy.obj。

&lt;Wildcard&gt; 的架构代码:

    <simpleType name="Wildcard">
      <restriction base="string">
        <pattern value="[^\\/]+"></pattern>
      </restriction>
    </simpleType>

我尝试输入&lt;Wildcard&gt;r_prior[0-9].obj&lt;/Wildcard&gt;,但它不起作用。

我应该怎么做?

【问题讨论】:

  • 不确定您想要什么,您尝试了什么以及您得到了什么错误或错误输出。这在我看来一切都很好(值 r_prior[0-9].obj 匹配正则表达式 [^\\/]+。)
  • 我想选择符合通配符标准的文件并在最后放入 zip 存档,但使用“r_prior[0-9].obj”不起作用。
  • 明确一点,你的目标是什么?为Wildcard 元素定义 有效值,或为Wildcard 元素指定 一个值某些应用程序将解释以匹配某些文件?
  • @kjhughes “为通配符元素指定一个值,某些应用程序将解释为匹配某些文件?” -> 我有一个应用程序,为了从工具中选择一个复选框,在后台运行这个 xml 文件(具有通配符),我有一个 Java 代码,它遍历选定目录中的所有文件并将匹配通配符的文件复制到存档文件。现在,我想复制 r_prior1.obj、r_prior2.obj、r_prior3.obj……等等。但不是 r_prior_dummy.obj。

标签: java regex xml xsd glob


【解决方案1】:

也许你需要转义“.”

r_prior[0-9][.]obj

在此处查看工作示例:RegexR

【讨论】:

  • 我收到此错误“元素‘通配符’的值‘r_prior[0-9]\.obj’无效。”可能是斜线的问题,我们需要改变模式中的模式吗?
  • 试试 r_prior[0-9][.]obj
【解决方案2】:

这里似乎有两种独立类型的模式匹配:

  • 正则表达式xs:pattern 中使用的 XML 架构。比文件通配更具表现力;使用* 匹配零个或多个 前面的字符; ? 可选匹配前面的字符; 以及更多匹配的构造。
  • 文件通配符:哪些库经常用于过滤文件列表。通常不如正则表达式表达;使用* 匹配任何字符; ? 完全匹配一个未知字符 (在某些情况下包括 0 个未知字符);等

假设您只能更改 XML 文件,您需要检查 Java 应用程序以查看它支持的文件通配结构类型。 (如果您有来源,请查看正在执行什么调用来过滤文件列表并检查其文档。)您可以假设支持*。例如,您不能假设支持[characters]

【讨论】:

  • 感谢您的回答。 Java源代码使用Apache commons io库中的WildcardFileFilter来处理通配符,API说“这个过滤器根据一个或多个通配符选择文件和目录,通配符匹配器使用字符'?'和 '*' 表示单个或多个通配符。”有什么方法可以使用字符来满足我的要求吗?
  • 所以不直接支持[0-9]。除了更改 Java 代码之外,您还可以使用 r_prior?.obj 代替 r_prior[0-9].obj。尽管这将匹配r_prior 之后的任何单个字符,而不仅仅是数字,但它至少会根据需要排除r_ram_dummy.obj
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 2017-06-17
相关资源
最近更新 更多