我目前的问题是在属性值中找到HTML-Tags。我认为使用/jcr:root/content/xgermany//*[jcr:contains(., '<strong>')] order by @jcr:score
字符<
和>
似乎存在问题,因为此查询会查找其属性中包含strong
的所有内容。它会找到<strong>Some Text</strong>
,但也会找到This is a strong man
。
Query Builder API也没有帮助我。
是否有可能使用XPath或SQL查询解决它,或者我是否必须遍历整个内容?
答案 0 :(得分:0)
我不完全理解This is a strong man
为什么会找到'<strong>'
,但听起来意外的行为来自"simple search-engine syntax" for the second argument to jcr:contains()。显然<
>
被忽略了,因为&#34;毫无意义&#34;标点符号。
您可以尝试引用搜索字词:
/jcr:root/content/xgermany//*[jcr:contains(., '"<strong>"')]
虽然如果整个XPath表达式用双引号括起来,你可能需要调整一下。
当然,即使它有效,这也不会非常强大,因为您通过搜索固定字符串而不是实际解析HTML来尝试查找HTML元素。
答案 1 :(得分:0)
如果你有一个特定的jcr:primaryType和目标属性,你可以做这样的事情
numpy.vectorize()
我测试了它,但你需要知道你感兴趣的属性。
这是jcr-sql语法
答案 2 :(得分:0)
以这种方式开始使用类似冠军的谓词,所有这些对你来说都是有意义的!
HTML Encode <strong>
HTML Decimal <strong>
查询构建器是您的朋友: 谓词:(像CHAMP!)
path=/content/geometrixx
type=nt:unstructured
property=text
property.operation=like
property.value=%<strong>%
谓词:(就像一个CHAMP!)
path=/content/geometrixx
type=nt:unstructured
property=text
property.operation=like
property.value=%<strong>%
去吧:
XPath:
/jcr:root/content/geometrixx//element(*, nt:unstructured)
[
jcr:like(@text, '%<strong>%')
]
SQL2(已经涵盖...... NASTY YUK ..)
SELECT * FROM [nt:unstructured] AS s WHERE ISDESCENDANTNODE([/content/geometrixx]) and text like '%<strong>%'
答案 3 :(得分:0)
虽然我确信使用一串谓词完全有可能,但它可能会走错路线。理想情况下,在存储或发布HTML时解析HTML会更好。 所需信息将存储在相关节点上的简单属性中。与大量过于复杂的查询语法相比,查询将只使用property = value查询更简单。 它可能会更快。 因此,如果您使用HTMLClient读取HTML,然后使用OSGI服务进行解析,则可以为您准确地保存这些属性。每次更改HTML时,该过程都会根据需要更新这些属性。如果您的SQL过多,请稍微思考一下。