我想出有点干,以为什么 -至少在.Net框架-这是必要使用XmlNamespaceManager,以处理命名空间(或相当笨重和详细[local-name()=...的XPath谓词/功能/等等)时执行XPath查询.我确实理解为什么命名空间是必要的或至少是有益的,但为什么它如此复杂?
为了查询简单的XML文档(没有命名空间)...
<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode>
<nodeName>Some Text Here</nodeName>
</rootNode>
Run Code Online (Sandbox Code Playgroud)
...可以使用类似的东西doc.SelectSingleNode("//nodeName")(可以匹配<nodeName>Some Text Here</nodeName>)
神秘#1:我的第一个烦恼 - 如果我理解正确 - 只是添加一个命名空间引用到父/ root标记(无论是否用作子节点标记的一部分),如下所示:
<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode xmlns="http://someplace.org">
<nodeName>Some Text Here</nodeName>
</rootNode>
Run Code Online (Sandbox Code Playgroud)
...需要几行额外的代码来获得相同的结果:
Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("ab", "http://s+omeplace.org")
Dim desiredNode As XmlNode = doc.SelectSingleNode("//ab:nodeName", nsmgr)
Run Code Online (Sandbox Code Playgroud)
...本质上是梦想一个不存在的前缀(" ab")来找到一个甚至不使用前缀的节点.这有什么意义?有什么问题(概念上)doc.SelectSingleNode("//nodeName")?
神秘#2:所以,假设你有一个使用前缀的XML文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<rootNode xmlns:cde="http://someplace.org" xmlns:feg="http://otherplace.net">
<cde:nodeName>Some Text Here</cde:nodeName>
<feg:nodeName>Some Other Value</feg:nodeName> …Run Code Online (Sandbox Code Playgroud) 当我尝试声明一个字典时:
private Dictionary<String, int> map;
Run Code Online (Sandbox Code Playgroud)
编译器给我以下错误:
令牌"int"上的语法错误,此令牌后预期的维度
但它可以正常使用Integer.我隐约知道Java对待int/ Integer不同(我来自.NET背景),但我希望有人可以给我一个完整的解释,为什么我不能在字典中使用原语<>
我一整天都在谷歌搜索,没有找到答案,所以如果已经回答,请提前道歉.
我试图从大量不同的网站获取所有可见文本.原因是我想处理文本以最终对网站进行分类.
经过几天的研究,我认为Selenium是我最好的机会.我找到了一种方法来获取所有文本,使用Selenium,遗憾的是同一文本被多次抓取:
from selenium import webdriver
import codecs
filen = codecs.open('outoput.txt', encoding='utf-8', mode='w+')
driver = webdriver.Firefox()
driver.get("http://www.examplepage.com")
allelements = driver.find_elements_by_xpath("//*")
ferdigtxt = []
for i in allelements:
if i.text in ferdigtxt:
pass
else:
ferdigtxt.append(i.text)
filen.writelines(i.text)
filen.close()
driver.quit()
Run Code Online (Sandbox Code Playgroud)
该if内部条件for环路消除同一文本多次读取的问题的尝试-它不然而,只有某些网页上按计划工作.(它也使脚本变得更慢)
我猜测我的问题的原因是 - 当要求元素的内部文本时 - 我也得到嵌套在相关元素内的元素的内部文本.
有没有办法解决?有没有某种主要元素我抓住内在的文本?或者是一种完全不同的方式,可以让我达到目标?任何帮助都会非常感激,因为我对这一点没有任何想法.
编辑:我使用Selenium而不是Mechanize和Beautiful Soup的原因是因为我想要JavaScript招标文本
我有一个Access数据库,其中包含有关人员的信息(员工档案和相关信息).前端有一个类似控制台的界面,可以一次修改一种类型的数据(例如一种形式的学位,另一种形式的联系信息).它目前链接到多个后端(每种类型的数据一个,一个用于基本配置文件信息).所有文件都位于网络共享上,许多后端都是加密的.
我之所以这样做是因为我了解MS Access必须将整个数据库文件拉到本地计算机才能进行任何查询或更新,然后将任何已更改的数据放回网络共享.我的理论是,如果一个人正在更改电话号码或地址(联系信息),他们只需要提取/修改/替换联系信息数据库,而不是拉一个包含联系信息,项目,学位,奖励的大型数据库等等,只需更改一个电话号码,从而减少多个用户访问数据时锁定数据库和网络流量的可能性.
这是一个明智的结论吗?我是否误解了很多?我错过了别的什么吗?
我意识到每个文件都需要考虑开销,但我不知道其影响有多大.如果我要巩固后端,那么还有一个潜在的好处就是能够让Access处理级联删除等的参照完整性,而不是编码...
我很感激任何想法或(合理有效的)批评.
情况:我想基于用户属性执行Hibernate验证(根据用户的帐户数据允许输入的不同验证规则) - 我认为必须可以使用.properties文件来指定特定的正则表达式,但我无法弄清楚出了什么问题:
我当前指定验证正则表达式的方法从特定接口文件中的常量中拉出该正则表达式(将所有内容保持在一起)并将其作为常量插入@Pattern()到每个变量的注释中 - 例如对于变量workPhone:
@Column(name = "WORK_PHONE")
@NotEmpty(message = "{ContactInfo.workPhone.notEmpty}")
@Pattern(regexp = PHONE_NUMBER_PATTERN_SL, message = "{ContactInfo.workPhone.regexp.msg}")
@Size(max = 10, message = "{ContactInfo.workPhone.size}")
protected String workPhone;
Run Code Online (Sandbox Code Playgroud)
...正则表达式存储在其中static final String PHONE_NUMBER_PATTERN_SL并且所有{ContactInfo.workPhone...}调用都来自.properties文件:
ContactInfo.workPhone.notEmpty=Please enter your phone number.
ContactInfo.workPhone.regexp.msg=Invalid characters entered in phone. Use this format XXX-XXX-XXXX.
ContactInfo.workPhone.size=Phone can not be longer than 10 digits.
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种安排使得验证模式在应用程序范围内(编译),因为我无法想办法为不同的公司,位置,就业位置等的不同用户更改它.为了能够区分基于这个信息,我还想将正则表达式存储在属性文件中,我尝试以这种方式包含它:
ContactInfo.workPhone.regexp=\d{3}-\d{3}-\d{4}
Run Code Online (Sandbox Code Playgroud)
同时在第一个代码清单中的第三行的注释中包含引用:
@Pattern(regexp = "{ContactInfo.workPhone.regexp}", message = "{ContactInfo.workPhone.regexp.msg}")
Run Code Online (Sandbox Code Playgroud)
然后,我会为不同的场合切换属性文件,例如允许/要求非美国电话号码格式.
问题:我可以做我想做的事吗?有没有更好的方法来指定模式(甚至可能允许数据库调用而不是属性文件)?
另外,我不是最好的(因为我从另一个开发人员手中接管),所以如果有人只能指向我关注使用@Pattern注释或其他Hibernate正则表达式验证标记的重点资源,那么可能会给我所需的所有信息.
TL; DR:是否可以对Hibernate模式验证中使用的表达式使用动态设置或修改的值,而不是预定义和预编译的常量?
我可能大约有7或8个熟悉jQuery(1-10级),所以我不确定这是否有意义,但我想知道是否有人知道jQuery函数或可能是一个插件,它允许只有在给定条件为真时才执行jQuery分支.否则,我很想听听有人认为这个概念在某种程度上是有缺陷的(编辑以及它是如何有缺陷的)
虽然可以使用类似于此的常规JavaScript语法控制各种事件的附件:
var desiredElement = $('.parent') // find the parent element
.hover(overFunction,offFunction) // attach an event while I've got the parent in 'scope'
.find('.child-element'); // then find and return the child
if (booleanVar1) { // if one condition
desiredElement.click(clickFunction1); // attach one event
} else if (booleanVar2) { // or if a different condition
desiredElement.click(clickFunction2); // attach a different event
} else { // otherwise
desiredElement.click(clickFunction3); // attach a default event
}
$('.parent').find('.other-child') // (or $('.parent …Run Code Online (Sandbox Code Playgroud) 我想知道Java如何处理同一个案例的多个相同实例.从概念上讲,我认为以下内容是有道理的:
switch (someIntegerValue)
{
case 1:
case 2:
DoSomethingForBothCases();
break;
case 3:
DoSomethingUnrelated();
break;
case 1:
DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall();
break;
case 2:
DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall();
break;
}
Run Code Online (Sandbox Code Playgroud)
本质上,我想为一个案例1或2(使用直通)执行一大块代码,但是稍后,只有一个代码块仅针对案例2执行.
相反,以下是必要的吗?
switch (someIntegerValue)
{
case 1:
DoSomethingForBothCases();
DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall();
break;
case 2:
DoSomethingForBothCases();
DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall();
break;
case 3:
DoSomethingUnrelated();
break;
}
Run Code Online (Sandbox Code Playgroud)
我的实际代码更复杂,但会使用相同的原则(例如" 案例1:nope;好吧...... 案例2:是的!执行此代码!; 案例3:nope; 案例1再次?:仍然没有! ; 案例2再次?:是的!执行此代码; 没有更多案例:全部完成!")
我正在使用一种方法迭代地在字符串中执行替换.
function replaceAll(srcString, target, newContent){
while (srcString.indexOf(target) != -1)
srcString = srcString.replace(target,newContent);
return srcString;
}
Run Code Online (Sandbox Code Playgroud)
但它对我想要的目标文本不起作用,主要是因为我无法想到如何正确地写出该文本:我想要删除的是字面上的"\n",(包括逗号和引号),那么什么作为第二个参数传递,以使其正常工作?
提前致谢.
java ×3
javascript ×2
regex ×2
xpath ×2
.net ×1
dictionary ×1
jquery ×1
ms-access ×1
networking ×1
performance ×1
primitive ×1
python ×1
replace ×1
string ×1
webpage ×1