我有一个处理HTTP请求的Web服务.它接收的文档具有嵌入的DOCTYPE,用于指定.dtd文件.我希望使用更新的XML架构验证文件,以便在较新的设备连接到我的服务时制作.
我可以成功忽略.dtd文件中的验证,但.dtd文件必须存在于我的本地硬盘驱动器上.我想删除这些过时的文件,并没有找到办法.
我正在处理的示例XML文档:
<?xml version="1.0" encoding="us-ascii" standalone="no"?>
<!DOCTYPE SomeMessage SYSTEM "SomeMessage.dtd">
<SomeMessage>data</SomeMessage>
Run Code Online (Sandbox Code Playgroud)
我用来打开文档的功能:
private void LoadXmlDoc(XmlTextReader myXmlTextReader)
{
XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.ValidationType = ValidationType.Schema;
readerSettings.Schemas.Add(null, MyGoodSchemaFile);
readerSettings.DtdProcessing = DtdProcessing.Ignore;
readerSettings.XmlResolver = null; // Added as a test.
readerSettings.ValidationEventHandler += ValidationEventHandle;
XmlReader myXmlReader = XmlReader.Create(myXmlTextReader, readerSettings);
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.XmlResolver = null; // Added as a test.
myXmlDocument.Load(myXmlReader); // Exception thrown here!
}
Run Code Online (Sandbox Code Playgroud)
捕获的异常:
System.IO.FileNotFoundException: Could not find file 'c:\windows\system32\inetsrv\SomeMessage.dtd'. File name: 'c:\windows\system32\inetsrv\SomeMessage.dtd' at System.IO.__Error.WinIOError(Int32 errorCode, String …
我有一种尝试调用内存中图像转换器的方法,如果失败,则尝试在磁盘上进行图像转换.(内存中的图像转换器将尝试分配图像的第二个副本,因此如果原始图像非常大,我们可能没有足够的内存.)
public BufferedImage convert(BufferedImage img, int type) {
try {
return memory_converter.convert(type);
}
catch (OutOfMemoryError e) {
// This is ok, we just don't have enough free heap for the conversion.
}
// Try converting on disk instead.
return file_converter.convert(img, type);
}
Run Code Online (Sandbox Code Playgroud)
我想为JUnit编写单元测试来运行每个代码路径,但是运行JUnit并且用足够少的堆来强制执行它是不方便的OutOfMemoryError.有没有办法模拟OutOfMemoryErrorJUnit内部?
在我看来,我可以创建一个假子类,BufferedImage它会OutOfMemoryError在第一次调用内存转换器调用的方法时抛出,但随后会在后续调用中正常运行.不过,这似乎是一种黑客行为.
我正在尝试从特定模型中获取查询.我无法正确过滤数据.
我已经修复了一个错误,它返回了其他用户数据,但现在它返回了模型中一行数据的重复项.
events = Event.objects.filter(club=user.get_profile().main_club) | Event.objects.filter(invclub=user.get_profile().main_club) | Event.objects.filter(invited=user)
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试执行的查询.
我的目标是,让用户手动邀请(邀请)他们的俱乐部被邀请(invclub)或他们的俱乐部是主办俱乐部(俱乐部)的所有活动
我可能正朝着错误的方向接近这个,并且可能更容易做到这一点.任何帮助是极大的赞赏.
编辑:comms.models
class Event(models.Model):
title = models.CharField(max_length='255')
club = models.ForeignKey(Club, verbose_name="Host Club")
invclub = models.ManyToManyField(Club, verbose_name="Invited Clubs", related_name="Invited Clubs", blank=True)
l_desc = models.CharField(max_length='255', verbose_name="Location Description")
l_long = models.CharField(max_length='255', verbose_name="Longitude", blank=True)
l_lat = models.CharField(max_length='255', verbose_name="Latitude", blank=True)
edate = models.DateTimeField(default=datetime.now, verbose_name="Event Date", blank=True)
length = models.CharField(max_length='255', verbose_name="Event Length", blank=True)
invited = models.ManyToManyField(User, related_name="Invited Users", blank=True)
attending = models.ManyToManyField(User, related_name="Attending Users", blank=True)
declined = models.ManyToManyField(User, related_name="Declined Users", …Run Code Online (Sandbox Code Playgroud) 我现在正在使用perlbrew来管理perl的多个版本,但perlbrew是全局的.如果我perlbrew switch perl-5.10.1在任何shell中,那么所有shell和脚本现在将使用perl版本5.10.1.没有孤立.有没有办法让perlbrew开关在shell本地,或者是否有类似的工具能够在本地更改活动perl?
鉴于这样的几种类型:
interface I {}
class C : I {}
Run Code Online (Sandbox Code Playgroud)
如何进行静态类型转换?我的意思是:我如何以在编译时检查的方式更改其类型?
在C++中你可以做到static_cast<I*>(c).在C#中,我能做的最好是创建备用类型的临时变量并尝试分配它:
var c = new C();
I i = c; // statically checked
Run Code Online (Sandbox Code Playgroud)
但是这会阻止流畅的编程.我必须创建一个新的变量来进行类型检查.所以我已经确定了这样的事情:
class C : I
{
public I I { get { return this; } }
}
Run Code Online (Sandbox Code Playgroud)
现在我可以静态转换C到我刚好打电话c.I.
在C#中有更好的方法吗?
(如果有人想知道我为什么要这样做,那是因为我使用显式接口实现,并且从另一个成员函数中调用其中一个需要首先转换为接口类型,否则编译器无法找到该方法.)
UPDATE
我想出的另一个选项是对象扩展:
public static class ObjectExtensions
{
[DebuggerStepThrough]
public static T StaticTo<T>(this T o)
{
return o;
}
}
Run Code Online (Sandbox Code Playgroud)
所以((I)c).Doit()也可以c.StaticTo<I>().Doit().嗯...可能仍然坚持简单演员.想想我还是会发布这个其他选项.
所以我有这些类暴露了一组子对象.
我不希望其他类添加或删除集合中的对象,因为我需要连接到子对象中的事件,因此当它们被添加或删除时,我希望能够进行其他处理.但我真的很喜欢内部操纵泛型的简易性.
我提到这是一个WPF应用程序,所以我需要INotifySupport吗?
我能想到的最好的就是这样的.
public class foo : INotifyPropertyChanged
{
protected List<ChildFoo> _Children = new List<ChildFoo>();
public foo()
{
}
public void AddChild(ChildFoo newChild)
{
DoAttachLogic(newChild);
_Children.Add(newChild);
NotifyPropertyChange("Children");
}
public void RemoveChild(ChildFoo oldChild)
{
DoRemoveLogic(oldChild);
_Children.Remove(oldChild);
NotifyPropertyChange("Children");
}
public ChildFoo[] Children
{
get
{
return _Children.ToArray();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我没有看到这种设计存在严重缺陷吗?
每次访问Children属性时,我们都会将列表转换为数组.
对此的任何建议都会很棒.
给出如此的路径:
G:\path\foo\..\bar\baz.txt
Run Code Online (Sandbox Code Playgroud)
我们可以立即在脑海中解析,并且操作系统将解析为:
G:\path\bar\baz.txt
Run Code Online (Sandbox Code Playgroud)
以编程方式执行此操作的最快方法是什么?换句话说,库函数是否已经存在,它将为我干净利落地做到这一点,所以我不会自己搞砸它.
// in pseudocode
string[] s = input.split('\')
string output
for ( int i = s.length ; i > 0 ; i-- ) {
if ( s[i] == ".." ) i--;
else output = s[i] + "\" + output
}
return output
Run Code Online (Sandbox Code Playgroud)
但请注意,这个答案不包括案例(意外,但潜在)
G:\path\foo\..\..\bar\baz.txt
Run Code Online (Sandbox Code Playgroud)
这当然是
G:\bar\baz.txt
Run Code Online (Sandbox Code Playgroud)
TSQL函数也可以运行!!!!!
我将它从返回值(关闭webservice调用)传递到sproc(用于XML碎化),并希望消除foo\..\因为我传入的值被用作防止以后重复处理的密钥.如果我插入G:\path\foo\..\bar\baz.txt并插入另一个脚本G:\path\bar\baz.txt文件将被处理两次.